【发布时间】:2012-01-13 14:47:15
【问题描述】:
请看下面的代码:
var val1 = ExtractValue(firstParam);
var val2 = ExtractValue(secondParam);
var type1 = val1.GetType();
var type2 = val2.GetType();
TypeConverter converter1 = TypeDescriptor.GetConverter(type1);
TypeConverter converter2 = TypeDescriptor.GetConverter(type2);
if (converter1 != null && converter1.CanConvertFrom(type2))
{
var temp = converter1.ConvertFrom(val2);
return val1.Equals(temp);
}
return false;
当我尝试使用“int”和枚举对象时,这段代码没有返回 true,这对我来说是个谜。我什至在即时窗口中尝试了“val1.Equals((int)(val2))”,结果为真,但converter1.CanConvertFrom(type2) 仍然为假。
你能帮我解决一下吗?有什么我想念的吗?
谢谢
【问题讨论】:
-
枚举是 int 类型,它们是可相互转换的。
-
您假设每种类型都有一个 [TypeConverter]。事实并非如此,只有少数人这样做。
-
@affan,Enum 的默认支持类型是 'int',但不是必须的;例如,它也可能是 long,在这种情况下,它可能会在分配给 int 时溢出。
标签: c# reflection casting runtime