强制转换为可为null的类型是个坏主意
本文关键字:类型 转换 null | 更新日期: 2023-09-27 18:29:35
我一直认为应该不惜一切代价避免铸造。当然,有时您没有真正的选择(尤其是当您需要在支持多个接口的接口类型之间转换时)。
我最近经常使用的一种模式是从不可为null的类型转换为可为null类型。例如:
public int? GetFooBar(someCriteria) {
// Code to get a Foo
return foo == null ? null : (int?)foo.Bar; // Bar is a non-null int
}
他们把我唯一的选择选在这里了吗?我还有什么其他选择?
我想我可以抛出一个异常,但我不喜欢用不必要的异常处理程序来破坏我的代码。此外,找不到foo可能是意料之中的事情,而不被视为"异常"。
您可以始终:
if(foo == null)
return null;
return foo.Bar;
不涉及选角,而且以简洁为代价,稍微清晰一点。
让我指出
return foo == null ? null : (int?)foo.Bar;
编译为与相同的操作码
return foo == null ? new Nullable<int>() : new Nullable<int>(foo.Bar);
带有if语句的版本也可能编译为相同的操作码,所以这实际上只是个人品味的问题。这个版本怎么样:
return foo == null ? (int?)null : foo.Bar;
同样的事情。如果要使用条件运算符,则必须指出其第二个或第三个操作数中可为null的部分。