检查对象是否为System.Generic.List <t>,对于任何T

时间:2017-05-17 08:15:54

标签: c# generics .net-4.5

示例代码:

    using System.Collections.Generic;
    ...

        // could return anything. 
        private object GetObject(int code)
        {
            object obj = null;

            if (code == 10)
            {
                var list1  = new List<Tuple<int, string>>();
                list1.Add(new Tuple<int, string>(2, "blah"));
                obj = list1;                
            }
            else if (code == 20)
            {
                obj = "hello";
            }
            else if (code == 30)
            {
                var list2 = new List<string>();
                list2.Add("o");
                obj = list2; 
            }
            // else etc, etc. 

            return obj; 
    }

    private bool DoAction(int code)
    {
        object obj = GetObject(code);

        bool isListT = ??? 
        return isListT;    
    }

在上面的代码中,GetObject可以返回任何类型的对象。 在DoAction内部,在调用GetObject之后,我希望能够判断返回的obj是否是任何类型的System.Collections.Generic.List<T>。我不在乎(也可能不知道)T是什么。所以DoAction(10)和DoAction(30)应该返回true,DoAction(20)将返回false。

2 个答案:

答案 0 :(得分:5)

您可以使用Type.GetGenericTypeDefinition

object obj = GetObject(code);
bool isList = obj?.GetType().GetGenericTypeDefinition() == typeof(List<>);

答案 1 :(得分:1)

这应该有效

@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class Foo {
}

然后:

private static bool DoAction(int code)
{
    object obj = GetObject(code);

    return obj is IList;
}