检查Size类型是否为空的正确方法是什么?

时间:2016-01-29 15:44:47

标签: 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);

我宁愿不用新的()来增加尺寸类型只是为了检查我是否有无量纲尺寸。基于.NET大小文档here,我看起来有几种方法可以检查空的大小,但备注部分似乎有一些注意事项。

所有这些选项在功能上是否相同?

3 个答案:

答案 0 :(得分:3)

如果这是System.Drawing.Size(WinForms),您可以使用IsEmpty属性。

但是,System.Windows.Size(WPF)有一个奇怪的IsEmpty实现:

public bool IsEmpty
{
    get
    {
        return (this._width < 0.0);
    }
}

因此,如果您想检查它是否为默认Size值,请将其与Size.Emptydefault(Size)

进行比较

答案 1 :(得分:2)

根据documentation Size.IsEmpty,如果trueWidthHeight,则0将为Height

由于您希望 Widhtvar isSizeEmpty = (sizeData.Width == 0 && sizeData.Height == 0); 都为零,因此您可以轻松地比较它们:

sizeData

Size.EmptysizeData进行比较无效,因为documentation说:

  

调用此属性时,Size实例的宽度和高度等于负无穷大。

new Size(0, 0)#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<string.h> #include<signal.h> #include<errno.h> #include"util.h" void setSigHandler(){ void (*oldHandler)(); oldHandler = signal(SIGINT, SIG_IGN); signal(SIGTERM, oldHandler); } void prompt(){ char* user = getlogin(); printf("[%s]-->$", user); } void getNextCommand(){ errno = 0; cmd = malloc(sizeof *cmd); if(cmd == NULL){ char* error = strerror(errno); printf("malloc:%s\n", error); exit(EXIT_FAILURE); } fgets(cmd->payload, sizeof(cmd->payload), stdin); if(cmd->payload[strlen(cmd->payload) - 1] == '\n'){ cmd->payload[strlen(cmd->payload) - 1] = '\0'; } } void parseCommandString(){ cmd->payloadArgc = 0; char* buffer = strtok(cmd->payload, " "); while(buffer != NULL){ cmd->payloadArgv[cmd->payloadArgc] = buffer; if(!strcmp(cmd->payloadArgv[cmd->payloadArgc], ">")){ cmd->payloadArgv[cmd->payloadArgc] = NULL; fileName = strtok(NULL, " "); break; } if(!strcmp(cmd->payloadArgv[cmd->payloadArgc], "|")){ cmd->payloadArgv[cmd->payloadArgc] = NULL; pCount++; break; } buffer = strtok(NULL, " "); cmd->payloadArgc++; } } 进行比较既简单又干净,并且(对我而言)比我的第一个版本更好一点。但是(性能和记忆力)的差异是不可测量的。

答案 2 :(得分:0)

与size.Empty相比应该是最好的。

查看MSDN