哪种方式是优选的表情是这样的:哪些是首选的:新的可空<int>或(int?)null?
int? Id
{
get
{
int i;
return Int32.TryParse(Request["id"], out i) ? i : (int?)null;
}
}
是它更好地施放null
或创建new Nullable<T>
?
哪种方式是优选的表情是这样的:哪些是首选的:新的可空<int>或(int?)null?
int? Id
{
get
{
int i;
return Int32.TryParse(Request["id"], out i) ? i : (int?)null;
}
}
是它更好地施放null
或创建new Nullable<T>
?
最好的是default(int?)
,因为它总是按预期工作(引用类型,值类型,甚至泛型)。
我倾向于将(int?)
表示法更改为Nullable<int>
。该语言提供了这种语法糖,所以我尝试使用它。
这也是我称之为int
而不是Int32
的原因。
有趣的是,你只需要定义一个返回类型。换句话说,这也将工作:
return Int32.TryParse(Request["id"], out i) ? (int?)i : null;
...即使编译器建议你投空: 类型条件表达式不能确定,因为有“廉政”之间的隐式转换'< null>'
为你做什么最清楚。
这就是说,我宁愿只返回null
,编译器会计算出细节。
没关系,它会生成完全相同的代码。由C#编译器将(int?)null
转换为new Nullable<int>()
。你可以通过编写一个小测试程序来查看它,并用ildasm.exe来查看它。所以“更好”仅仅是你喜欢的风格。一致的使用int?将是我个人的偏好。
一个实用的注意事项:在典型的调试会话中,您可能很有兴趣了解null返回。特别是因为你读的数据不会产生你所期望的。如果您在单独一行中写回归返回语句,这变得非常简单:
int i;
if (Int32.TryParse(Request["id"], out i)) return i;
else return null; // <== set breakpoint here.
也摆脱了演员阵容。并生产完全相同的代码
以前没见过,我喜欢它!我一直使用(int?)null,并总是觉得它笨重。 – 2010-04-29 17:51:05