代码之家  ›  专栏  ›  技术社区  ›  iCollect.it Ltd

为什么某些Silverlight对象不能是可空的类型?

  •  2
  • iCollect.it Ltd  · 技术社区  · 14 年前

    显然你不能有一个 在银色的灯光下。我想知道为什么不这样做的技术原因,以及这可能适用于多少对象?

    comment flamewar 在声明“Rectangle”类型不是可为null的类型之后。那就是你不能有一个 可为空<矩形> “或a” 矩形? "

    我的错误是只在Silverlight中测试它,并假设Silverlight的行为系统.Windows.Shapes.矩形结转至系统图矩形键入.Net。我真丢脸。我已经删除了我的评论,因为它们没有给堆栈溢出增加任何价值。

    如果有人能完全回答这个问题,我们将不胜感激。

    2 回复  |  直到 14 年前
        1
  •  9
  •   Quartermeister    14 年前

    Nullable<T> 只能与值类型或结构一起使用,并且系统.Windows.Shapes.Rectangle是引用类型或类。你不需要使用 ,因为您已经可以将空引用分配给类型为的变量系统.Windows.Shapes。矩形:

    System.Windows.Shapes.Rectangle rect = null;
    

    相比之下,系统图矩形是值类型,因此其值不能为null。默认值是一个全为零的矩形。

    System.Drawing.Rectangle rect = null; // Does not compile
    System.Drawing.Rectangle rect = 
        default(System.Drawing.Rectangle); // All fields are zero
    
        2
  •  0
  •   Community CDub    7 年前

    更好的答案应该是考虑选项类型和可空类型之间的差异,这在泛型公共语言基础设施的ECMA标准中顺便提到。

    A great explanation of this

    所以您不需要可为空的<矩形>。您需要一个选项<矩形>。

    请参阅MSDN文档: Core.Option Module (F#)