You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 9中如何将可空字符串赋值给可空int并保留null值?

在C# 9中实现可空字符串转可空整数(null时保留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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:55:34