.NET Point.IsEmpty与IsDefined

时间:2009-11-20 21:04:55

标签: c# system.drawing

在我的UI类中,开发人员可以选择定义位置属性(System.Drawing.Point的类型)。默认情况下,此属性初始化为Point.Empty。由类封装的内部代码使用Point属性的.IsEmpty来确定是否已设置位置。如果属性不为空,则将使用x / y值。如果为空,代码将尝试使用行/列algorythm放置它。

我的问题:
我正在使用属性的.IsEmpty来确定它是否已设置。令我惊讶的是,如果开发人员将该属性设置为0,则会显示为Empty。点0,0在图形中有效。我也理解为什么.IsEmpty为0,0值返回true。

1)如果没有创建我自己的类或从System.Drawing.Point继承,有没有办法知道属性是否已设置?

我能想到的唯一想法是使用值“new Point(-1,-1)”来默认属性并对其进行测试。有没有更好的办法?如果没有,请确认。

我在Visual Studio 2005和Visual Studio 2008中使用C#

谢谢!

3 个答案:

答案 0 :(得分:5)

有几种方法:

  1. 使属性成为可以为空的Point,这样,当你没有设置它时它将为“null”
  2. 通过将私有布尔字段设置为true
  3. 来跟踪是否有任何调用了setter方法

    即。之一:

    public Point? Location { ... }
    

    或:

    public Point Location
    {
        get ...
        set
        {
            _LocationSet = true;
            _Location = value;
        }
    }
    

答案 1 :(得分:2)

将字段保留为Point?Nullable<Point>的句法糖)而不是Point。这基本上跟踪值是否为空值的“真实”。您如何公开该属性取决于您 - 您可以将其公开为Point并使其在未设置的情况下尝试获取它时抛出异常,或者您可以将其公开为Point?这将允许通过稍后再将其设置为null来“取消设置”。

Nullable值类型是针对这种情况精确设计的。

答案 2 :(得分:1)

我可能会考虑使用可以为空的Point: System.Drawing.Point? 可空 这将为知道是否设置某些内容提供更清晰的途径。