C# 检查尺码类型是否为空的正确方法是什么?
假设我有这样一种方法:C# 检查尺码类型是否为空的正确方法是什么?,c#,C#,假设我有这样一种方法: public SomeSizeCheckingMethod(Size sizeData) { var isSizeEmpty = (sizeData == new Size(0, 0)); //some other logic based on this question } 要检查空尺寸,我的选项似乎是: sizeData == Size.Empty 或 sizeData.IsEmpty sizeData == new Size(0, 0); 或
public SomeSizeCheckingMethod(Size sizeData)
{
var isSizeEmpty = (sizeData == new Size(0, 0));
//some other logic based on this question
}
要检查空尺寸,我的选项似乎是:
sizeData == Size.Empty
或
sizeData.IsEmpty
sizeData == new Size(0, 0);
或
sizeData.IsEmpty
sizeData == new Size(0, 0);
我不想只为了检查我是否有无量纲的尺寸而新建一个尺寸类型。根据.NET大小文档,似乎有几种方法可以检查空大小,但在备注部分似乎有一些注意事项
所有这些选项在功能上是否相同?与大小相比。空的应该是最好的
查看如果这是
System.Drawing.Size
(WinForms),您可以使用IsEmpty
属性
但是,System.Windows.Size
(WPF)有一个奇怪的IsEmpty
实现:
public bool IsEmpty
{
get
{
return (this._width < 0.0);
}
}
公共图书馆是空的
{
得到
{
返回(此宽度<0.0);
}
}
因此,如果要检查它是否为默认的大小
值,请将其与大小进行比较。根据大小,将其为空
或默认(大小)
。如果宽度
或高度
为0,则IsEmpty
将为真
由于您希望Height
和widt
都为零,因此可以轻松比较它们:
var isSizeEmpty = (sizeData.Width == 0 && sizeData.Height == 0);
将sizeData
与Size.Empty进行比较将不起作用,因为上面说:
调用此属性时,Size实例的宽度和高度等于负无穷大
将sizeData
与new Size(0,0)
进行比较既简单又干净,而且(在我看来)比我的第一个变体要好一点。但是(在性能和内存方面)的差异是无法测量的。大小是自定义类吗?或者从哪个名称空间获得它?也许一个简单的sizeData==null就可以了?它是一个标准的.NET类型。System.Windows,Size。我认为Size是struct,否则与新对象竞争就没有意义了。它们做不同的事情-查看文档中的Size.Empty
;它与新尺寸(0,0)不同。“当调用此属性时,Size实例的宽度和高度等于负无穷大。”因此,这取决于您的逻辑,什么是空的<代码>大小。IsEmpty
未检查“无量纲大小”。:“因此,不要使用此属性检查0区域”谢谢--我在问题中引用了该链接:-)嗯,我没有在文本中识别该链接,我更喜欢您的第一种方法,因为它不需要创建新的大小。但是你是对的,如果OP需要检查“无量纲尺寸”,他需要比较宽度
和高度
Size.IsEmpty
还提到不应出于以下原因使用它:“不要使用此属性检查0区域”@TimSchmelter实际上不是。正如@DStanley指出的,我误解了文档System.Drawing.Size.IsEmpty
检查高度和宽度是否都为零。无论如何,我不认为在所有这些变化中有任何相关的性能或内存差异。但是OP使用的是工作方式不同的:public bool IsEmpty{get{return\u width<0;}}
这并不是我真正希望的答案,但是回答了这个问题。谢谢你完全正确。MSDN中的注释让我有点困惑。@axljSystem.Windows.Size.Empty
不等于new Size(0,0)
!这是一个相当新的尺寸(double.NegativeInfinity,double.NegativeInfinity)
!因此新大小(0,0)==Size.Empty
将为false
。