C#:使用编译器强制检查null

mor*_*rog 4 c#

我正在设计一个API,并且当一些方法无法完成所请求的操作时返回null,比如按名称搜索对象.这需要使用这些方法来检查空结果,否则就有可能暴露出错误.

如果没有检查方法的结果是否为空,是否有编译时错误/警告?例如,如果您声明一个变量然后使用它而不分配任何内容,编译器会抱怨.这些方法返回引用类型,因此Nullable不起作用,尽管它确实具有我想要的行为.

抛出异常也是一个很好的解决方案,但据我所知,C#没有办法强制捕获像Java这样的异常.

谢谢.

Mar*_*ell 7

IMO,那些方法应该抛出异常.

其中很多(理论上)可以在4.0中使用代码契约进行改进,因为当方法声明返回null(或不返回null)并且需要非null(或不是null)时,这会使它更正式.

但不是; 没有内置的检查; 编译器强制执行的东西都明确赋值,而不是什么他们被分配到.在C#3.0中,你可以做一些像cheeky这样的事情:

public static T ThrowIfNull<T>(this T obj) where T : class {
    if(obj == null) throw new SomeException("message");
    return obj;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用它作为一个流畅的API:

SomeReturnClass myObj = foo.SomeMethod().ThrowIfNull();
Run Code Online (Sandbox Code Playgroud)

那么myObj永远不会是空的......