打开类型变量

时间:2017-04-25 09:04:10

标签: c# switch-statement c#-7.0

这感觉它应该非常容易,但是我无法看到让它发挥作用的方法。

Type propType = propertyInfo.PropertyType;
switch (propType)
{
  case typeof(byte): // Can't do this, 'A constant value is expected'
    // Do something
    break;
}

我也尝试过做

private const byteType = typeof(byte);

然后启用它,但是由于同样的原因,这行代码无法编译。

所以,问题是:如何打开Type的实例?

3 个答案:

答案 0 :(得分:3)

好的,我最初的回答是错误的。你不能在类型转换中执行此操作(不使用when指出,这在我看来很糟糕)。问题是Type不是常数,因此您无法在交换机中使用它。

我错了,因为您没有使用实际值,而是使用Type实例。您必须继续使用if语句。

答案 1 :(得分:2)

您可以使用switch执行此操作,只需使用var模式和when后卫:

Type propType = propertyInfo.PropertyType;
switch (propType)
{
    case var b when b == typeof(byte):
        // Do something
        break;
}

答案 2 :(得分:0)

如果你开始在switch上使用Type,我认为你几乎没有选择,两者都很差。

第一种选择是使用TypeCode,例如:

switch (Type.GetTypeCode(propType))
{
  case TypeCode.Byte:
    // Do something
    break;
}

此方法受到严格限制,因为它仅支持the TypeCode enum中的少数内置类型。

另一种选择是打开类型名称:

switch (propType.FullName)
{
  case "System.Byte":
    // Do something
    break;
}

这也不是很好,因为你必须写出包括命名空间在内的全名,不会检查名称是否有拼写错误,而switch也会接受" fake" System.Byte类型(即名为System.Byte的自定义类型,而不是.Net中包含的类型)。