C#中在if条件内声明变量用于后续判断的正确语法是什么
你要找的是C# 7.0及以上版本引入的模式匹配语法,正确写法分不同版本兼容情况:
写法1:兼容C# 7.0及以上版本
用is关键字做类型判断的同时直接声明对应类型的局部变量,匹配成功后无需额外强转即可使用:
public void SomeMethod(object obj) { // 类型匹配成功时会把obj转换为Order类型赋值给myObj变量 if (obj is Order myObj && myObj.Item != null) { Console.WriteLine(myObj.Item.Name); } }
写法2:C# 8.0及以上版本的属性模式简写
可以直接在类型匹配的同时校验内部属性的非空状态,同时把属性值赋值给局部变量,省去单独访问属性的步骤:
public void SomeMethod(object obj) { // {}是空模式,代表Item属性不为null,同时把非空的Item赋值给myItem变量 if (obj is Order { Item: {} myItem }) { Console.WriteLine(myItem.Name); } }
写法3:C# 9.0及以上版本的更易读写法
可以用not null替代空模式{},语义更清晰:
public void SomeMethod(object obj) { if (obj is Order { Item: not null myItem }) { Console.WriteLine(myItem.Name); } }
以上三种写法在对应C#版本下都可以正常运行,和你最开始写的强转判断逻辑完全等效,同时避免了多次强制转换的冗余代码,也能保证类型安全。
内容的提问来源于stack exchange,提问作者Mohammed Kasfy
相关产品推荐
相关产品推荐

