ReSharper建议合并条件表达式致风险,求更优解决方案
解决方案
针对你遇到的ReSharper提示冲突问题,有以下几个更优处理方案,无需禁用提示:
方案1:明确属性的可空性
如果EncodedMyValue本身允许为null,直接给该属性添加[CanBeNull]特性。这样ReSharper能识别属性接受null值,不会再报AssignNullToNotNullAttribute风险:
[CanBeNull] public string EncodedMyValue { get; } public MyDto([CanBeNull] string myValue) { EncodedMyValue = HttpUtility.HtmlEncode(myValue); }
方案2:确保赋值结果非空
如果EncodedMyValue必须为非null值,使用空合并运算符保证结果始终是有效字符串,替代原有的条件判断:
public MyDto([CanBeNull] string myValue) { EncodedMyValue = HttpUtility.HtmlEncode(myValue) ?? string.Empty; }
这样既满足ReSharper合并条件表达式的建议,又避免了null赋值给非空属性的风险。
方案3:修正ReSharper对方法的注解(进阶)
如果确认HttpUtility.HtmlEncode传入null时确实返回null,但ReSharper内置注解错误标记它不会返回null,可以通过ContractAnnotation特性手动修正方法返回可空性:
[ContractAnnotation("null => null; notnull => notnull")] public static string HtmlEncode(string value) { return System.Web.HttpUtility.HtmlEncode(value); }
该方案需要封装自定义的HtmlEncode方法,适合需要全局统一修正注解的场景。
内容的提问来源于stack exchange,提问作者Sarov
相关产品推荐
相关产品推荐

