新的模式匹配语法可以与现有变量一起使用吗?

Mar*_*urd 5 c# pattern-matching c#-7.0

我有现有的代码:

    internal bool firstAsSymbol(out Symbol s)
    {
        return (s = first as Symbol) != null;
    }
Run Code Online (Sandbox Code Playgroud)

我可以使用新is语法,但我需要引入局部变量:

    internal bool firstAsSymbol(out Symbol s)
    {
        var result = first is Symbol sym;
        s = sym;
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

编辑:事实上,上面的代码不能编译!sym可能是 undefined 就s = sym;行了。所以更糟糕的是:你必须在 then 和 else 子句中使用一个if语句并赋值s。(它确实试图允许sym在正确的条款中触及有效)。

有没有更简单的替代方法(当然,除了原始代码)?

Mar*_*urd 1

正如我在对问题的评论中意识到的那样,调用站点似乎是:

exprs.firstAsSymbol(out var s)
Run Code Online (Sandbox Code Playgroud)

可以改为:

exprs.first is Symbol s
Run Code Online (Sandbox Code Playgroud)

编辑:除了我在问题编辑中指出的问题:您不能假设s == null模式匹配何时失败。

事后看来,应该调用该例程firstIsSymbol:-)