2010-08-29 58 views
2

顯然你不能在Silverlight中有可空<矩形>。我想知道爲什麼不適用以及可能適用多少對象的技術原因?爲什麼某些Silverlight對象不能使用Nullable <>類型?

今天我意外地開始了一個小的comment flamewar之後說「Rectangle」類型不是Nullable類型。也就是說,你不能有一個「可空<矩形>」或「矩形?

我的錯誤是在Silverlight中測試它僅假設一個Silverlight System.Windows.Shapes的行爲.Rectangle繼承到.Net中的System.Drawing.Rectangle類型。對我感到羞恥。我自從刪除了我的評論,因爲他們沒有增加堆棧溢出的價值。

如果有人能完全回答這個問題,將不勝感激。

+1

作爲術語,矩形''或'可空'被稱爲*可空類型*的問題? '矩形'本身不是。它或者是a *值類型*(在System.Drawing.Rectangle的情況下)或*引用類型*(在Silverlight的一個的情況下)。 – Timwi 2010-08-29 16:24:22

+0

請注意,System.Windows.Shapes.Rectangle在.NET中是完整的框架。它是WPF的一部分。 Silverlight是WPF的一個子集。 System.Drawing.Rectangle是完全不同的東西,它不是WPF/Silverlight API,而是用於GDI和Windows窗體,它具有完全不同的佈局和座標系統,因此不能使用舊的System.Drawing.Rectangle 。 – 2010-09-15 20:23:42

回答

9

Nullable<T>只能與值類型,或結構被使用,並且是System.Windows.Shapes.Rectangle引用類型或類。你並不需要使用Nullable<T>,因爲你已經可以指定一個空引用類型System.Windows.Shapes.Rectangle的變量:

System.Windows.Shapes.Rectangle rect = null; 

相比之下,System.Drawing.Rectangle是值類型,所以它不能有null值。默認值是全零的矩形。

System.Drawing.Rectangle rect = null; // Does not compile 
System.Drawing.Rectangle rect = 
    default(System.Drawing.Rectangle); // All fields are zero 
+0

所以淨矩形是一個簡單的結構,而Silverlight的版本需要的所有額外的UIElement管道(這當然是要求它的對象)。涼。感謝那。 – 2010-08-29 15:41:25

+0

@HiTech Magic:也許你正在尋找System.Windows.Rect? – Bubblewrap 2010-08-29 16:05:00

+1

除了這個答案,你可以將光標放在單詞「矩形」(或任何其他類型),然後按F12找出它是一個結構還是一個類。更好的是,你可以設置Visual Studio以不同的顏色,這就是我所做的。 – Timwi 2010-08-29 16:22:26

0

更好的答案應該是考慮的選項類型和可空類型,這是偶然覆蓋的ECMA標準通用語言基礎仿製藥之間的差別。

一個great explanation of this已經給出了F#在計算器上。

所以,你不想要一個可空<矩形>。你想要一個選項<矩形>。

請參閱MSDN文檔:Core.Option Module (F#)

相關問題