【发布时间】:2011-07-06 11:47:07
【问题描述】:
我有一个关于类型比较的有趣问题。我正在尝试将隐含类型与显式类型进行比较,以测试某物是否是任何类型的集合
var obField = value.GetType().InvokeMember(_stCollectionField,
System.Reflection.BindingFlags.GetProperty,
null, value, null);
if (obField.GetType() != typeof(IEnumerable<object>))
{
return true;
}
在我的测试过程中,我可以确保obField 会变成对象的集合。但是,我发现它总是会在 check 和 return true 中运行,而我希望它跳过它(因为这两种类型是相等的。)
稍微调试一下就可以得到obField 的类型object {System.Collections.Generic.List<System.DateTime>}。
如何才能匹配该类型?
谢谢
【问题讨论】:
-
如果
obField是List<DateTime>类型,它显然不是IEnumerable<object>类型...你又问了什么问题? -
List
扩展了 IEnumerable ,不是吗? -
@Andy:是的,但“==”并不意味着“可扩展自”,它意味着“等于”(同样适用于“!= ”)。由于
List<DateTime>和IEnumerable<object>不等于,“!=”的计算结果为真。 -
你能比较一下类型名称吗?
-
好点,Heinzi,我没想到,谢谢。
标签: c# type-conversion implicit-typing