C#:声明函数永远不会返回null?

C#:声明函数永远不会返回null?,c#,compiler-construction,C#,Compiler Construction,背景: 有一个开发人员原则“如果请求的项不存在,我的函数应该返回null还是引发异常?”我不想在这里讨论。我决定为所有必须返回值的情况抛出一个异常,而该值仅在(编程或逻辑)无效请求的情况下不存在 最后是我的问题: 我是否可以标记一个函数,使编译器知道它永远不会返回null,并警告任何检查返回值是否为null的人?如果您返回一个值类型,则它不能为null(除非您使用系统“nullable”包装器显式地使其为null)。您可以使用 例如: public String Method1()

背景: 有一个开发人员原则“如果请求的项不存在,我的函数应该返回null还是引发异常?”我不想在这里讨论。我决定为所有必须返回值的情况抛出一个异常,而该值仅在(编程或逻辑)无效请求的情况下不存在

最后是我的问题:
我是否可以标记一个函数,使编译器知道它永远不会返回null,并警告任何检查返回值是否为null的人?

如果您返回一个值类型,则它不能为null(除非您使用系统“nullable”包装器显式地使其为null)。

您可以使用

例如:

    public String Method1()
    { 
        Contract.Ensures(Contract.Result<String>() != null);

        // To do
    }
publicstringmethod1()
{ 
Contract.sure(Contract.Result()!=null);
//做
}

您正在寻找的

使用代码契约,您可以定义一个方法不返回null的契约

using System.Diagnostics.Contracts; // required namespace 

public T MethodName()
{
    Contract.Ensures(Contract.Result<T>() != null); //where T is the return type.

    // method body...
}
使用System.Diagnostics.Contracts;//必需的命名空间
公共T方法名()
{
Contract.Contract(Contract.Result()!=null);//其中T是返回类型。
//方法体。。。
}

可能的重复:哦,我没有看到它们,虽然我正在寻找(显然不够努力)谢谢,这似乎就是我要寻找的。一个.NET开箱即用的解决方案会更好,但这似乎是通常的方式(看看代码契约的建议数量)。至少在.NET 4上是开箱即用的。这是.NET开箱即用的解决方案。这是.NET4.0的正式部分。