我們可以給結構類型的變量分配空值嗎?C#中的可空類型轉換?
struct MyStruct
{
}
MyStruct var = null;
這是可能的在C#.net?
如果不是?那麼C#如何允許Nullable < T> struct類型的變量可以分配爲空?
我們可以給結構類型的變量分配空值嗎?C#中的可空類型轉換?
struct MyStruct
{
}
MyStruct var = null;
這是可能的在C#.net?
如果不是?那麼C#如何允許Nullable < T> struct類型的變量可以分配爲空?
對主題:
... C#如何允許Nullable < T>變量的結構類型可以分配爲空?
答案其實很簡單:C#編譯器知道Nullable<T>
並將其作爲特殊情況處理以維持錯覺。
例如,這樣的:
int? a;
if (a != null) ...
實際上編譯成這樣:
if (a.HasValue) ...
幾乎所有的這個魔法是由編譯器處理 - .NET將主要觀點Nullable<T>
只是另一種值類型。我記得閱讀(最有可能從Eric Lippert's blog),在開發過程的後期,他們發現了一個單獨的編譯器技巧無法處理的邊緣問題。運營團隊同意做出一個處理Nullable<T>
作爲特例的更改。不幸的是,我不記得什麼特殊情況,我找不到參考了。
請查看這篇文章的詳細信息(尤其是第二個評論這是利珀特): http://blogs.msdn.com/ericlippert/archive/2008/05/07/covariance-and-contravariance-part-twelve-to-infinity-but-not-beyond.aspx
是的,這是可能的,但你必須聲明你的變量爲「可空」:
MyStruct? foo = null;
或
Nullable<MyStruct> foo = null;
hello可空
@dinesh。事實上,編譯器不能接受null爲非空類型。可空
的Structs不能爲空,Nullable Types用於創建可空結構的情況下, 。
在C#中,struct
s是值類型,而class
es是引用類型。
struct
s不能被製作null
,所以你必須使用Nullable<T>
類將它包裝成可以無效的東西。
這是通過直接使用在聲明中Nullable<T>
類完成:
Nullable<MyStruct> foo;
或者通過使用Nullable<T>
的語法糖:
MyStruct? foo;
hello可空
甚至提出7個問題,他還沒有學會如何使用格式化後。 – Shoban 2010-02-12 09:06:02
hello可空是結構類型complier如何接受null爲這種類型?爲什麼不接受相同的結構類型的變量? –
dinesh
2010-02-12 09:32:35