c# - 字符串上的模式匹配

标签 c# pattern-matching c#-7.0

我想知道是否有办法在 C# 7 中做这样的事情

        var test = "aaeag";
        switch (test)
        {
            case test.StartsWith("a"):
                break;
            default:
                break;
        }

遗憾的是,这看起来不太可能。这是正确的还是我做错了什么?

最佳答案

这在 C# 7 中是可能的,使用 when 守卫:

var test = "aaeag";
switch (test)
{
    case var s when s.StartsWith("a"):
        break;
    default:
        break;
}

您的代码版本正在执行的操作通常称为事件模式。通过例如定义扩展方法:

public static bool StartsWithPattern(this string str, string matchPattern) => 
    str.StartsWith(matchPattern);

那么你的 switch 可以变成:

var test = "aaeag";
switch (test)
{
    case StartsWith("a"):
        break;
    default:
        break;
}

如果您希望在未来的 C# 版本中看到此功能,请 upvote this proposal .

关于c# - 字符串上的模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42952535/

相关文章:

c# - 为什么可空的模式匹配会导致语法错误?

string - Oracle:获取部分字符串匹配的长度

algorithm - 寻找(子)时间序列的(非常)快速近似匹配

c# - VS2017 - C#7 语言功能在 MVC View 中不起作用

c# - C# 7.0 中的表达式主体获取/设置访问器功能

c# - WPF DataGrid 移动到最后选定的行而不突出显示最近单击的行

c# - PropertyChangedCallback 封装

c# - 使用 HTML 在 MVC 中提交表单

c# - Dapper具体化为元组

c# - Entity Framework 6.1 更新记录的子集