示例代码:
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。
答案 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;
}