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

如何让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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:17:39