假设我有这样的方法:
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,我看起来有几种方法可以检查空的大小,但备注部分似乎有一些注意事项。
所有这些选项在功能上是否相同?
答案 0 :(得分:3)
如果这是System.Drawing.Size
(WinForms),您可以使用IsEmpty
属性。
但是,System.Windows.Size
(WPF)有一个奇怪的IsEmpty
实现:
public bool IsEmpty
{
get
{
return (this._width < 0.0);
}
}
因此,如果您想检查它是否为默认Size
值,请将其与Size.Empty
或default(Size)
答案 1 :(得分:2)
根据documentation Size.IsEmpty
,如果true
或Width
为Height
,则0
将为Height
。
由于您希望 Widht
和var isSizeEmpty = (sizeData.Width == 0 && sizeData.Height == 0);
都为零,因此您可以轻松地比较它们:
sizeData
将Size.Empty
与sizeData
进行比较无效,因为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