在C#IsEmpty(on System.Windows.Rect)中不返回truewhere Width或Height为零.在MSDN中,它被注意到但没有(明确地)解释:
不要使用此属性来测试零区域; 面积为零的矩形不一定是空矩形.有关更多信息,请参阅Empty属性.
为什么不将IsEmpty实现为:
public bool IsEmpty
{
return Width == 0 || Height == 0;
}
Run Code Online (Sandbox Code Playgroud)
当前实现的用例是什么?
Rect.IsEmpty不是检查"空矩形",因为它没有区域,更多的是检查这个矩形结构是否为空矩形.空矩形基本上是Rect结构的默认值,所有字段都设置为初始值零.
因此,您必须IsEmpty更少了解(数学)"矩形",而是更多地了解.NET中的高技术数据结构.
注意,Rect.IsEmpty匹配其他矩形的实现,如Rectangle.IsEmpty.最后,结构的"空洞"也出现在框架的其他地方,例如Guid.Empty同样的想法.
标准库中有一个约定(有些不一致)贯穿始终,但这会导致混乱.有几种类型具有Empty属性(或字段),其中"Empty"表示某种特殊值,在某种意义上,默认值为空,或未初始化,具体取决于类型.
不幸的是,这并不总是有意义的.
一些例子:
string.Empty - ""字符串.Point.Empty - 点(0,0),虽然将点"空"称为没有意义. Size.Empty - 宽度= -infinity,Heigth = -infinity.......是的...... Guid.Empty - 00000000-0000-0000-0000-000000000000.我想这是有道理的.的种类.EventArgs.Empty - 用于没有事件数据的事件的值. Unit.Empty - 代表一个空单位.这是否意味着未定义?我不知道. Padding.Empty - 右=左=上=下= 0不一致的一个例子:
TimeSpan.Zero- 没有空字段或属性.但无论如何,Zero在这里可能是一个更好的名字.
对于Rect类,Rect.Empty是一个
"表示没有位置或区域的矩形的特殊值[...],其X和Y属性值为PositiveInfinity,并且具有NegativeInfinity的Width和Height属性值."
Rect.IsEmpty检查此特殊值.为什么?有人认为这是个好主意.也许他们错了.
PS有趣的是,.Net生态系统中还有其他矩形类型符合此约定,但具有不同的"空"概念.例如,XNA Rectangle.Empty返回一个Rectangle,其所有值都设置为零(与Rect类对比).
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |