gpt4 book ai didi

c# 7.0 : switch on System. 类型

转载 作者:IT王子 更新时间:2023-10-29 04:07:27 25 4
gpt4 key购买 nike

没有现有问题可以回答这个问题。

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com