在我的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#
谢谢!
答案 0 :(得分:5)
有几种方法:
即。之一:
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? 可空 这将为知道是否设置某些内容提供更清晰的途径。