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