在这样的表达式中首选哪种方式:
int? Id
{
get
{
int i;
return Int32.TryParse(Request["id"], out i) ? i : (int?)null;
}
}
最好是投放null
还是制作new Nullable<T>
?
答案 0 :(得分:23)
最好的是default(int?)
,因为它始终按预期工作(引用类型,值类型,甚至是泛型)。
答案 1 :(得分:5)
我倾向于将(int?)
符号改为Nullable<int>
。语言提供了这种语法糖,所以我尝试使用它。
这也是我称之为int
而不是Int32
的原因。
答案 2 :(得分:5)
没关系,它会生成完全相同的代码。 (int?)null
被C#编译器翻译为new Nullable<int>()
。您可以通过编写一个小型测试程序并使用ildasm.exe
所以“更好”只是你喜欢的风格。一致使用int?这将是我个人的偏好。
一个实际的注意事项:在典型的调试会话中,您可能会对找到返回null感兴趣。特别是因为您阅读的数据不会产生您期望的结果。如果您在单独的行上编写null-return语句,那将变得非常容易:
int i;
if (Int32.TryParse(Request["id"], out i)) return i;
else return null; // <== set breakpoint here.
摆脱演员阵容。并生成完全相同的代码
答案 3 :(得分:2)
做最清楚的事情。
那就是说我更愿意只返回null
并且编译器会计算出细节。
答案 4 :(得分:1)
有趣的是,您只需要定义一种返回类型。换句话说,这也有效:
return Int32.TryParse(Request["id"], out i) ? (int?)i : null;
...即使编译器建议您必须转换null: 无法确定条件表达式的类型,因为'int'和'&lt;之间没有隐式转换。 null&gt;'