显然,您无法在Silverlight中拥有 Nullable< Rectangle> 。我想知道为什么没有技术原因以及可能适用的对象数量?
今天我在说明“Rectangle”类型不是Nullable类型后意外地开始了一个小comment flamewar。那就是你不能有“ Nullable< Rectangle> ”或“矩形?”
我的错误在于仅在Silverlight中测试它,并假设Silverlight System.Windows.Shapes.Rectangle的行为转移到.Net中的System.Drawing.Rectangle类型。对我感到羞耻。我已经删除了我的评论,因为它们没有为Stack Overflow添加任何值。
如果有人能够完全回答这个问题,我们将不胜感激。
答案 0 :(得分: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
答案 1 :(得分:0)
更好的答案是考虑Option类型和Nullable类型之间的差异,这在ECMA泛型公共语言基础结构标准中偶然涉及。
已经为StackOverflow上的F#提供了great explanation of this。
所以你不想要Nullable&lt; Rectangle&gt;。您需要一个选项&lt; Rectangle&gt;。
请参阅MSDN文档:Core.Option Module (F#)