2015-11-20 24 views
1
List<List<HeaderTypeEnq<dynamic>>> IDEnq = new List<List<HeaderTypeEnq<dynamic>>>(); 
List<HeaderTypeEnq<dynamic>> IDListEnq = new List<HeaderTypeEnq<dynamic>>(); 

for (int i = 0; i < enq.Id.Count; i++) 
{ 
    IDListEnq.Add(new HeaderTypeEnq<dynamic>() { FieldTag = "ID", FieldName = "Segment Tag", Value = enq.Id[i].SegmentTag, Mandatory = "Y", CharacterType = "A", MaxLength = 03 }); 
    IDListEnq.Add(new HeaderTypeEnq<dynamic>() { FieldTag = "01", FieldName = "ID Type", Value = enq.Id[i].IDType, Mandatory = "Y", CharacterType = "N", MaxLength = 02 }); 
    IDListEnq.Add(new HeaderTypeEnq<dynamic>() { FieldTag = "02", FieldName = "ID Number", Value = enq.Id[i].IDNumber, Mandatory = "N", CharacterType = "P", MaxLength = 30 }); 
    IDEnq.Add(IDListEnq); 
} 
ValidateValue<List<HeaderTypeEnq<dynamic>>>(IDEnq, concaDel); 


private string ValidateValue<T>(object EnqTagList, ValidationDelegate del) 
{ 
    //errorstr = ""; 

    Type typeParameterType = typeof(T); 
    if (typeof(T) == typeof(List<HeaderTypeEnq<dynamic>>)) 
    { 
     //code 
    } 

根据我的理解,if (typeof(T) == typeof(List<HeaderTypeEnq<dynamic>>))应返回false为IDEnq(列表的列表),但它返回true!如何查找给定对象是否为通用列表<T>或列表列表<T>?

+0

你这样称呼它:'ValidateValue <名单 >>(...)',所以'T'的'名单>'。因此,'typeof(T)'等于'typeof(List >)'并不令人惊讶。 – poke

+0

您正在传递相同的列表并获取其类型,因此它将始终为真。 – Mairaj

回答

1

为了检查一个类型t是否是列表的列表,你可以做这样的事情:

if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(List<>)) 
{ 
    Type elementType = t.GetGenericArguments()[0]; 

    if (elementType.IsGenericType && elementType.GetGenericTypeDefinition() == typeof(List<>)) 
     Console.WriteLine("t is a list of lists"); 
    else 
     Console.WriteLine("t is just a list"); 
} 
else 
    Console.WriteLine("t is not a list"); 
0

按我的理解,如果(typeof运算(T)== typeof运算(名单> ))应该为IDEnq(列表的列表)返回false,但它返回true!

您所呼叫的泛型类型这样

ValidateValue<List<HeaderTypeEnq<dynamic>>>(IDEnq, concaDel); 

泛型类型是这个List<HeaderTypeEnq<dynamic>>。这与IDEnqobject以来无关。所以在你打电话给这样的方法时,T就是List<HeaderTypeEnq<dynamic>>的类型,条件成立。

你可以使你的通用方法是这样的。 现在EnqTagList是T.您需要获取其元素的类型。

private string ValidateValue<T>(T EnqTagList, ValidationDelegate del) 
{ 
    if (EnqTagList.GetType().GetGenericArguments()[0] == typeof(List<HeaderTypeEnq<dynamic>>)) 
    { 
    //code 
    } 
} 
相关问题