如何删除Point结构的值?

时间:2016-04-04 13:30:15

标签: c# struct

我正在使用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结构替换为自定义结构,这是不理想的。有什么想法吗?

2 个答案:

答案 0 :(得分:5)

Point是一个结构,因此它总是有一个值。您可以选择分配Point.Empty,或使用可空类型:

Point? p = null;

答案 1 :(得分:1)

帕特里克指出,System.Drawing.Pointstruct,因为总是有一个或更好的值, 是一个值按照定义。

目前还不清楚你想要实现的目标,但是因为你正在测试你的myPoint IsEmpty,你可以设置myPoint 变量< / em>到Point.Empty

myPoint = Point.Empty;

或者(因为Point出于某些奇怪的原因, mutable struct)你可以将变量的属性设置为零:

myPoint.X = 0;
myPoint.Y = 0;

或者像Patrick建议的那样使用可以为空的PointPoint? myPoint = null;)。

最适合您的解决方案取决于您的目标。