如何让C#空状态分析识别接口返回对象不可为空?
解决接口方法返回值的非空约束问题
启用<Nullable>enable</Nullable>后,编译器默认会假设接口的方法实现可能返回null——哪怕返回类型写的是string,因此会将var x推断为string?。要强制执行非空约束,让GetString()的返回值被识别为string,可以用以下几种方法:
方法一:添加[return: NotNull]属性
通过System.Diagnostics.CodeAnalysis命名空间下的NotNull属性,显式标记方法返回值绝不会为null:
using System.Diagnostics.CodeAnalysis; public interface ITester { [return: NotNull] string GetString(); }
方法二:使用nullable感叹号!标记返回类型
直接在返回类型后添加!,明确告知编译器该返回值永远非空:
public interface ITester { string! GetString(); }
方法三:强化实现类的非空约束
在实现ITester的类中,同样添加非空标记,避免实现类违规返回null,编译器会对返回null的代码给出警告:
public class TesterImpl : ITester { [return: NotNull] public string GetString() { return "非空字符串"; // 若返回null,编译器会触发警告 } }
修改完成后,鼠标悬浮var x时,其类型会显示为string,同时编译器会严格检查所有ITester实现类的GetString方法,确保不会返回null。
内容的提问来源于stack exchange,提问作者Kevin C
相关产品推荐
相关产品推荐

