哪種方式是優選的表情是這樣的:哪些是首選的:新的可空<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