哪个是首选:new Nullable <int>或(int?)null?</int>

时间:2010-04-29 17:43:35

标签: c# .net casting nullable null-cast

在这样的表达式中首选哪种方式:

int? Id
{
   get
   {
      int i;
      return Int32.TryParse(Request["id"], out i) ? i : (int?)null;
   }
}

最好是投放null还是制作new Nullable<T>

5 个答案:

答案 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;'