编辑:This is now available in C# 7.0.
我有以下一段代码检查给定的PropertyInfo
的type
。
PropertyInfo prop;
// init prop, etc...
if (typeof(String).IsAssignableFrom(prop.PropertyType)) {
// ...
}
else if (typeof(Int32).IsAssignableFrom(prop.PropertyType)) {
// ...
}
else if (typeof(DateTime).IsAssignableFrom(prop.PropertyType)) {
// ...
}
在这种情况下,有没有办法使用
switch
语句?这是我目前的解决方案:switch (prop.PropertyType.ToString()) {
case "System.String":
// ...
break;
case "System.Int32":
// ...
break;
case "System.DateTime":
// ...
break;
default:
// ...
break;
}
我认为这不是最好的解决方案,因为现在我必须给定
String
的完全合格的type
值。有小费吗? 最佳答案
我将完全按照要求回答这个问题:没办法。
从C#6开始,switch
仅完全支持某些类型的匹配常量。您没有尝试匹配常量。您多次调用IsAssignableFrom
方法。
请注意,IsAssignableFrom
与完全匹配的类型并不完全相同。因此,任何基于相等性比较或哈希表的解决方案都行不通。
我认为您拥有的if ... else if
解决方案完全可以。