这感觉它应该非常容易,但是我无法看到让它发挥作用的方法。
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
的实例?
答案 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中包含的类型)。