咨询C#中`is { }`语法糖的官方文档位置
这个C#语法糖的本质是什么?
这是C# 9.0及以后支持的模式匹配+变量声明组合写法,其中{ }是空值模式的简写,和not null完全等价,跟你查到的列表模式没关系。
拆解代码逻辑
原代码while ((line = sr.ReadLine()) != null)是先把ReadLine()的结果赋值给line,再判断是否为null;新写法while (sr.ReadLine() is { } line)做的是同一件事,但逻辑顺序更清晰:
- 执行
sr.ReadLine()获取返回值 - 判断这个返回值是否不为null(
{ }就是干这个的) - 如果不为null,就把这个值赋值给变量
line,同时整个表达式返回true,进入循环体 - 如果返回null,表达式返回
false,循环直接终止
等价写法
你也可以把它写成更直观的形式,效果完全一样:
while (sr.ReadLine() is not null line) { output += line + "\n"; }
为什么用这个写法?
相比原代码,它避免了把赋值操作嵌在条件判断里的写法——这种写法很容易不小心把!=写成==,导致逻辑bug,新写法的可读性和安全性都更高。
内容的提问来源于stack exchange,提问作者Sergioet
相关产品推荐
相关产品推荐

