2009-04-27 12 views
54
public bool IsList(object value) 
    { 
     Type type = value.GetType(); 
     // Check if type is a generic list of any type 
    } 

यह देखने का सबसे अच्छा तरीका क्या है कि दिया गया ऑब्जेक्ट एक सूची है, या किसी सूची में डाला जा सकता है?मैं कैसे जांचूं कि दिया गया मान एक सामान्य सूची है या नहीं?

+0

शायद तुम यहाँ http://stackoverflow.com/questions/755200/how-do-i-detect-that-an-object का जवाब खोजने के -इस-ए-जेनेरिक-संग्रह-और-किस प्रकार-इसमें- –

उत्तर

61
if(value is IList && value.GetType().IsGenericType) { 

} 
+0

यह काम नहीं करता है - मुझे निम्न अपवाद मिलता है - मान आईएलआईस्ट \t जेनेरिक प्रकार 'System.Collections.Generic.IList ' की आवश्यकता है '1' प्रकार तर्क –

+6

आपको सिस्टम का उपयोग करके जोड़ना होगा। चयन; आपकी स्रोत फ़ाइल के शीर्ष पर। आईएलआईएस इंटरफ़ेस मैंने सुझाव दिया है कि सामान्य संस्करण नहीं है (इसलिए दूसरा चेक) –

+1

आप सही हैं। यह एक आकर्षण की तरह काम करता है। मैं अपनी वॉच विंडो में इसका परीक्षण कर रहा था और लापता नामस्थान के बारे में सब भूल गया था। मुझे यह समाधान बेहतर लगता है, बहुत सरल –

1

शायद सबसे अच्छा तरीका है इस तरह कुछ करने के लिए होगा:

IList list = value as IList; 

if (list != null) 
{ 
    // use list in here 
} 

यह आपको अधिकतम लचीलापन दे देंगे और यह भी आप कई अलग अलग प्रकार है कि IList इंटरफ़ेस को लागू के साथ काम करने की अनुमति है।

+2

शामिल है, यह जांच नहीं करता है कि यह एक * जेनेरिक * सूची के रूप में पूछा गया है या नहीं। – Lucas

5
if(value is IList && value.GetType().GetGenericArguments().Length > 0) 
{ 

} 
+0

मुझे लगता है कि आपको GetType() उदा। value.GetType()। GetGenericArguments()। लंबाई> 0 – ScottS

+0

ओह, आप सही हैं। मेरी गलती। – BFree

12
bool isList = o.GetType().IsGenericType 
       && o.GetType().GetGenericTypeDefinition() == typeof(IList<>)); 
4
public bool IsList(object value) { 
    return value is IList 
     || IsGenericList(value); 
} 

public bool IsGenericList(object value) { 
    var type = value.GetType(); 
    return type.IsGenericType 
     && typeof(List<>) == type.GetGenericTypeDefinition(); 
} 
79

तुम लोगों कि विस्तार तरीकों का उपयोग का आनंद के लिए:

public static bool IsGenericList(this object o) 
{ 
    var oType = o.GetType(); 
    return (oType.IsGenericType && (oType.GetGenericTypeDefinition() == typeof(List<>))); 
} 

तो, हम कर सकता है:

if(o.IsGenericList()) 
{ 
//... 
} 
+1

नेट कोर के लिए इसे थोड़ा सा संशोधित करने की आवश्यकता है' oType.GetTypeInfo()। IsGenericType && oyype.GetGenericTypeDefinition() == टाइपऑफ (सूची <>);' –

2

विक्टर के आधार पर रॉड्रिग्स का जवाब , हम जेनेरिक के लिए एक और तरीका तैयार कर सकते हैं। वास्तव में, मूल समाधान केवल दो पंक्तियों को कम किया जा सकता है:

public static bool IsGenericList(this object Value) 
{ 
    var t = Value.GetType(); 
    return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<>); 
} 

public static bool IsGenericList<T>(this object Value) 
{ 
    var t = Value.GetType(); 
    return t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<T>); 
} 
संबंधित मुद्दे

 संबंधित मुद्दे