模式匹配字符串

Lia*_*iam 5 c# pattern-matching c#-7.0

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

        var test = "aaeag";
        switch (test)
        {
            case test.StartsWith("a"):
                break;
            default:
                break;
        }
Run Code Online (Sandbox Code Playgroud)

可悲的是,它看起来不太可能.这是正确的还是我做错了什么?

Dav*_*rno 10

这可以通过C#7使用when后卫来实现:

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

您的代码版本通常被称为活动模式.通过例如定义扩展方法:

public static bool StartsWithPattern(this string str, string matchPattern) => 
    str.StartsWith(matchPattern);
Run Code Online (Sandbox Code Playgroud)

然后您的开关可能变为:

var test = "aaeag";
switch (test)
{
    case StartsWith("a"):
        break;
    default:
        break;
}
Run Code Online (Sandbox Code Playgroud)

如果您希望在未来的C#版本中看到此功能,请提出此提议.