编辑:This is now available in C# 7.0.

我有以下一段代码检查给定的PropertyInfotype

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解决方案完全可以。

09-29 22:33