能否无需提前声明变量,在if空值检查中直接使用对象?
解决方案
当然有办法不用提前声明变量就能实现相同效果,从C# 7.0版本开始,就可以借助模式匹配语法在if条件里直接完成变量声明、赋值和空值检查:
基础写法(兼容C# 7.0+):
if (dbContext.Get<User>(id) is User user && user != null) { user.FirstName = ...; }这里
dbContext.Get<User>(id)的返回值会直接赋值给新声明的user变量,同时检查变量不为null,满足条件后就能在代码块里直接使用user。简洁写法(C# 8.0+):
利用属性模式可以进一步简化空值检查逻辑:if (dbContext.Get<User?>(id) is { } user) { user.FirstName = ...; }{ }模式会自动匹配非null的对象,同时把结果赋值给user,代码更紧凑。明确空值检查写法(C# 8.0+):
也可以用is not null语法直接声明并检查:if (dbContext.Get<User>(id) is not null User user) { user.FirstName = ...; }
以上写法中,user变量的作用域仅限于if的代码块内,和提前声明变量的效果完全一致,但省去了额外的变量声明步骤。
内容的提问来源于stack exchange,提问作者Kage2000
相关产品推荐
相关产品推荐

