我随处可见像这样的结构:
int? myVar = null;
string test = myVar.HasValue ? myVar.Value.ToString() : string.Empty;
为什么不简单地使用:
string test = myVar.ToString();
这不是一模一样的吗?至少Reflector这样说:
public override string ToString()
{
if (!this.HasValue)
{
return "";
}
return this.value.ToString();
}
那么,这是正确的(较短的版本)还是我漏掉了什么?
发布于 2010-03-16 01:14:09
我认为许多人有这样的检查,因为这不是一个对象的自然行为,可以持有空值。
发布于 2010-03-16 01:17:22
不,你是对的,更短的版本与其他人在这方面所做的是一样的。我倾向于大量使用的另一个结构是空合并运算符,而不是带有空值的三元结构。这也可以保护你不受空值的影响。对于ToString(),它不是必需的(正如您所指出的),但是对于默认的int值(例如),它工作得很好,例如:
int page = currentPage ?? 1;
这使您可以执行页上的所有整数操作,首先显式地检查空并调用currentPage中的值(其中currentPage是一个整数?可能是作为参数传递的)
发布于 2013-04-02 05:06:17
我知道,这是很久以前的事了,但是...我怀疑这是因为像int这样的可空类型?.ToString()方法不允许使用格式字符串。参见How can I format a nullable DateTime with ToString()?。也许在原始代码中,.ToString()中有一个格式字符串,或者程序员可能忘记了没有格式字符串的.ToString()在可以为still的类型上仍然可用。
https://stackoverflow.com/questions/2449008
复制相似问题