可空整数参与算术运算时,如何触发代码分析警告?
问题描述
以下代码编译运行时无任何警告或错误:
int? test1 = null; var test2 = test1 + 123; test1++; var test3 = test1;
最终test2和test3的值均为null。这种行为不符合直觉且存在风险,原本预期test1为null时会被默认赋值为0,使test2等于123、test3等于1。
请问是否有办法在可空整数未先通过空合并转换为实际整数就参与算术运算时,触发代码分析警告?
解决方案
默认情况下,C#允许可空值类型直接参与算术运算,运算结果仍为可空类型,因此编译器不会触发警告。要实现你需要的检测,可以通过以下方式:
自定义Roslyn分析器:编写自定义代码分析规则,检测
int?这类可空值类型在未通过??空合并运算符转换为非可空类型的情况下,参与+、++、-等算术运算的场景,匹配时触发警告。可基于Roslyn SDK创建该分析器,集成到项目的代码分析流程中。启用Nullable上下文配合检查:在项目文件中添加
<Nullable>enable</Nullable>启用Nullable上下文,它虽不会直接触发可空算术运算的警告,但能强化空值相关代码检查,结合手动审查可降低此类风险场景的出现概率。使用第三方代码分析规则集:部分第三方代码分析库提供了对应检测规则,可选择合适的规则集启用相关检测,精准识别“未做空合并的可空值类型算术运算”场景。
内容的提问来源于stack exchange,提问作者Jez
相关产品推荐
相关产品推荐

