没有现有问题可以回答这个问题。
在 c# 7 中,我可以直接在 System.Type
上切换吗?
当我尝试时:
switch (Type)
{
case typeof(int):
break;
}
它告诉我 typeof(int)
需要是一个常量表达式。
是否有一些语法糖可以让我避免 case nameof(int):
并直接比较类型是否相等? nameof(T)
在 case 语句中并不完全好,因为命名空间。因此,尽管名称冲突可能不适用于 int
,但它将适用于其他比较。
换句话说,我正在尝试比这更类型安全:
switch (Type.Name)
{
case nameof(Int32):
case nameof(Decimal):
this.value = Math.Max(Math.Min(0, Maximum), Minimum); // enforce minimum
break;
}
最佳答案
(已链接的)新模式匹配功能允许这样做。
通常,您会打开一个值:
switch (this.value) {
case int intValue:
this.value = Math.Max(Math.Min(intValue, Maximum), Minimum);
break;
case decimal decimalValue:
this.value = Math.Max(Math.Min(decimalValue, Maximum), Minimum);
break;
}
但是你可以用它来打开一个类型,如果你只有一个类型的话:
switch (type) {
case Type intType when intType == typeof(int):
case Type decimalType when decimalType == typeof(decimal):
this.value = Math.Max(Math.Min(this.value, Maximum), Minimum);
break;
}
请注意,这不是该功能的目的,它比传统的 if
...else if
...else if 可读性差
...else
链,而传统链就是它编译的结果。我不建议使用这样的模式匹配。
关于c# 7.0 : switch on System. 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43080505/