Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';t某些Silverlight对象不能为空<&燃气轮机;类型?_C#_Nullable - Fatal编程技术网

C# 为什么可以';t某些Silverlight对象不能为空<&燃气轮机;类型?

C# 为什么可以';t某些Silverlight对象不能为空<&燃气轮机;类型?,c#,nullable,C#,Nullable,显然,在Silverlight中不能有空值。我想知道为什么不这样做的技术原因,以及这可能适用于多少对象? 今天,在声明“矩形”类型不是可为null的类型之后,我意外地开始了一个小的测试。也就是说,不能有“可空”或“矩形” 我的错误是只在Silverlight中测试它,并假设Silverlight System.Windows.Shapes.Rectangle的行为会转移到.Net中的System.Drawing.Rectangle类型。我真丢脸。我已经删除了我的评论,因为它们没有给堆栈溢出增加任

显然,在Silverlight中不能有空值。我想知道为什么不这样做的技术原因,以及这可能适用于多少对象?

今天,在声明“矩形”类型不是可为null的类型之后,我意外地开始了一个小的测试。也就是说,不能有“可空”或“矩形”

我的错误是只在Silverlight中测试它,并假设Silverlight System.Windows.Shapes.Rectangle的行为会转移到.Net中的System.Drawing.Rectangle类型。我真丢脸。我已经删除了我的评论,因为它们没有给堆栈溢出增加任何价值

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

Nullable
只能用于值类型或结构,System.Windows.Shapes.Rectangle是引用类型或类。您不需要使用
Nullable
,因为您已经可以为System.Windows.Shapes.Rectangle类型的变量分配null引用:

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

更好的答案是考虑选项类型和可空类型之间的差异,这在泛型语言的公共语言基础结构的ECMA标准中偶然涉及。

已经为StackOverflow上的F#给出了A

所以你不想要一个可空的。你想要一个选择


请参阅MSDN文档:

因此.Net矩形是一个简单的结构,而Silverlight版本需要所有额外的UIElement管道(当然,这要求它是一个对象)。酷。谢谢。@HiTech Magic:也许您正在查找System.Windows.Rect?除此之外,您还可以将光标放在单词“矩形”(或任何其他类型)上,然后按F12键确定它是结构还是类。更好的是,您可以将Visual Studio设置为不同的颜色,这就是我所做的。就术语而言,
Rectangle?
Nullable
称为Nullable类型<代码>矩形本身不是。它可以是值类型(对于System.Drawing.Rectangle),也可以是引用类型(对于Silverlight类型)。请注意,System.Windows.Shapes.Rectangle位于完整框架的.NET中。这是WPF的一部分。Silverlight是WPF的一个子集。System.Drawing.Rectangle完全不同,它不是WPF/Silverlight API,而是用于GDI和Windows窗体,它们的布局和坐标系完全不同,因此不能使用旧的System.Drawing.Rectangle。