c# - switch语句的when表达式中的匿名变量

标签 c#

我想用 switch 处理多种条件。这是我的代码:

string i="a1";
switch (i)
{
    case string X when X.Contains("a", StringComparison.OrdinalIgnoreCase):
    case string Y when Y.Contains("b", StringComparison.OrdinalIgnoreCase):
    case string Z when Z.Contains("c", StringComparison.OrdinalIgnoreCase):
    case string A when A.Contains("d", StringComparison.OrdinalIgnoreCase):
        {
            //some logic
            break;
        }
    case string X when X.Contains("e", StringComparison.Ordinal):
        {
            //some logic     
            break;
        }                               
}

正如你所见,switch 语句中的变量 X/Y/Z/A 对我来说毫无用处,而我每次都必须声明它们。

有什么方法可以在不声明这么多无用变量的情况下实现它吗?

最佳答案

你可以使用类型匹配模式而不引入新的模式变量,然后在guard子句中引用i:

string i = "a1";
switch (i)
{
    case string when i.Contains("a", StringComparison.OrdinalIgnoreCase):
    case string when i.Contains("b", StringComparison.OrdinalIgnoreCase):
    case string when i.Contains("c", StringComparison.OrdinalIgnoreCase):
    case string when i.Contains("d", StringComparison.OrdinalIgnoreCase):
    {
        // some logic
        break;
    }
    case string when i.Contains("e", StringComparison.Ordinal):
    {
        // some logic     
        break;
    }
}

关于c# - switch语句的when表达式中的匿名变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74204551/

相关文章:

c# - 引用类中的 Self's Type

c# - 管理常量列表

c# - 更改文件夹 View ,可能是命名空间扩展?

c# - 无法对在OS X上运行的.net Core 3.1 Worker服务进行泊坞化

c# - 从 bool 函数c#中提取字符串变量

c# - 通过属性在 MVC4 中格式化 DateTime

c# - 在 DbContext 选项配置中未调用“AddEntityFramework *' was called on the service provider, but ' UseInternalServiceProvider”

c# - .Net 是否有支持 html5 视频(WebRTC)的 Webbrowser 控件?

c# - TripleDES 16 字节不工作

xna - 这个样本会产生垃圾吗?