2016-01-10 33 views
0

假設我有機會到現場的使用反射類型:如何檢測如果一個類型是一個列表?

FieldInfo item; 
Type type = item.FieldType; 

我想知道,如果type是一個通用的List或沒有,我怎麼能這樣做?我需要這樣的東西如下,但它不工作:

if (type == typeof(List<>)) 

回答

1

嘗試

Type type = item.FieldType; 
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List<>)) 
1

你需要的是:

/// <summary> 
/// Determines whether the given <paramref name="type"/> is a generic list 
/// </summary> 
/// <param name="type">The type to evaluate</param> 
/// <returns><c>True</c> if is generic otherwise <c>False</c></returns> 
public static bool IsGenericList(this Type type) 
{ 
    if (!type.IsGenericType) { return false; } 

    var typeDef = type.GetGenericTypeDefinition(); 
    if (typeDef == typeof(List<>) || typeDef == typeof(IList<>)) { return true; } 
    return false; 
} 
相關問題