C# 9中如何将可空字符串赋值给可空int并保留null值?
嘿,针对你遇到的这个场景——当可空字符串b为null时,希望可空整数a也赋值为null,而不是Convert.ToInt32默认返回的0,C# 9里有几种简洁且符合现代语法风格的方案,当然你最终采用的if判断写法完全没问题,这里再给你梳理一下:
用
int.TryParse结合空分支处理(更安全)
如果你想避免Convert.ToInt32遇到无效字符串时抛出异常的问题,可以用int.TryParse来处理,同时自然覆盖b为null的情况:a = int.TryParse(b, out var parsedValue) ? parsedValue : (int?)null;当
b是null或者无法转换成整数时,TryParse会返回false,这时直接给a赋值null;转换成功的话就把解析后的值赋值给a,一举两得。利用C# 9的模式匹配(一行式写法)
C# 9的模式匹配语法让我们可以把判断和转换写得更紧凑:a = b is not null and int parsed ? parsed : null;这里先检查
b不为null,同时尝试把它转换为int并赋值给parsed,满足条件的话就把parsed给a,否则赋值null,看起来很简洁。你已经在用的
if分支写法
你最终使用的这段代码:if(b is not null) a = Convert.ToInt32(b);其实非常直观易读,维护起来也很方便,唯一需要注意的是如果
b是非null但无法转换成整数的字符串(比如"abc"),Convert.ToInt32会抛出异常,如果你的业务场景里b只会是null或者有效的数字字符串,那这个写法完全够用;如果要兼容无效输入,换成上面的TryParse方案会更稳妥。
另外补充一句:Convert.ToInt32(null)返回0是它的设计逻辑,我们上面的方法都是优先处理null情况,绕开这个默认行为,从而实现你想要的“null转null”效果。
内容的提问来源于stack exchange,提问作者Lajith

