哪个更受欢迎:new Nullable <int>或(int?)null?

aba*_*hev 12 .net c# casting nullable null-cast

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

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

是否更好地施放null或创造new Nullable<T>

Sam*_*ell 23

最好的是default(int?)因为它总是按预期工作(引用类型,值类型,甚至在泛型中).


Gre*_*g D 5

我倾向于选择(int?)符号Nullable<int>.语言提供了这种语法糖,所以我尝试使用它.

这也是为什么我把它int代替Int32.


Han*_*ant 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.
Run Code Online (Sandbox Code Playgroud)

摆脱演员也是如此.并生成完全相同的代码