C# 隐式类型与显式类型-C的比较#

C# 隐式类型与显式类型-C的比较#,c#,type-conversion,implicit-typing,C#,Type Conversion,Implicit Typing,我有一个关于类型比较的有趣问题。我试图比较一个隐含类型和一个显式类型,以测试某个对象是否是任何类型的集合 var obField = value.GetType().InvokeMember(_stCollectionField, System.Reflection.BindingFlags.GetProperty, null, value, null); if (obF

我有一个关于类型比较的有趣问题。我试图比较一个隐含类型和一个显式类型,以测试某个对象是否是任何类型的集合

var obField = value.GetType().InvokeMember(_stCollectionField, 
                              System.Reflection.BindingFlags.GetProperty, 
                              null, value, null);

if (obField.GetType() != typeof(IEnumerable<object>))
{
    return true;
}
var obField=value.GetType().InvokeMember(\u stCollectionField,
System.Reflection.BindingFlags.GetProperty,
null,value,null);
if(obField.GetType()!=typeof(IEnumerable))
{
返回true;
}
在测试过程中,我可以确保
obField
将成为对象的集合。但是,我发现它总是在检查中运行,并且
返回true
,我希望它跳过检查(因为这两种类型是相同的)

通过一点调试,我将
obField
的类型设置为
object{System.Collections.Generic.List}

如何匹配该类型?

感谢使用,正如这里使用的:

例如:

if (typeof(IEnumerable<object>).IsAssignableFrom(obField.GetType())) { ... }
if(typeof(IEnumerable).IsAssignableFrom(obField.GetType()){…}

如果
obField
属于
List
类型,则它显然不是
IEnumerable
类型。。。你的问题又是什么?列表扩展了IEnumerable,不是吗?@Andy:是的,但是“==”并不意味着“可以从中扩展”,而是意味着“等于”(对“!=”也是如此)。由于
List
IEnumerable
不相等,“!=”的计算结果为true。您能比较类型名称吗?很好,Heinzi,我没有想到,谢谢。另外:这只适用于.NET 4,因为之前没有接口的协方差。@Andy:如果您想测试任何类型的集合,那么您最好与非泛型的
IEnumerable
接口进行比较。