我正在使用Windows Forms在C#中编写程序。我将 myPoint 声明为 myForm的公共数据成员。我将 foo 声明为 myForm的私有方法 (事实上它是一个点击事件),在这个方法中我需要写一些东西像:
if (myPoint.IsEmpty)
myPoint = new Point(//position);
else
{
//operation involving myPoint
myPoint = null; //WHICH RETURNS THE ERROR
}
我收到错误:' Point'是一种不可为空的数据类型
我正在阅读有关动态内存管理的一些材料,但到目前为止,我似乎无法找到有关此案例的任何内容。我唯一能想到的是将Point结构替换为自定义结构,这是不理想的。有什么想法吗?
答案 0 :(得分:5)
Point
是一个结构,因此它总是有一个值。您可以选择分配Point.Empty
,或使用可空类型:
Point? p = null;
答案 1 :(得分:1)
帕特里克指出,System.Drawing.Point
是struct
,因为总是有一个或更好的值, 是一个值按照定义。
目前还不清楚你想要实现的目标,但是因为你正在测试你的myPoint
IsEmpty
,你可以设置myPoint
变量< / em>到Point.Empty
:
myPoint = Point.Empty;
或者(因为Point
出于某些奇怪的原因, mutable struct)你可以将变量的属性设置为零:
myPoint.X = 0;
myPoint.Y = 0;
或者像Patrick建议的那样使用可以为空的Point
(Point? myPoint = null;
)。
最适合您的解决方案取决于您的目标。