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在正确的条款中触及有效)。
有没有更简单的替代方法(当然,除了原始代码)?
正如我在对问题的评论中意识到的那样,调用站点似乎是:
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:-)
| 归档时间: |
|
| 查看次数: |
252 次 |
| 最近记录: |