我看到到处都是如下结构:
int? myVar = null;
string test = myVar.HasValue ? myVar.Value.ToString() : string.Empty;
Run Code Online (Sandbox Code Playgroud)
为什么不简单地使用:
string test = myVar.ToString();
Run Code Online (Sandbox Code Playgroud)
那不完全一样吗?至少Reflector说:
public override string ToString()
{
if (!this.HasValue)
{
return "";
}
return this.value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
那么,这是正确的(较短的版本)还是我错过了什么?
Tom*_*ana 111
你是对的.同样在这个问题中,建议使用前一种解决方案,而实际上没有人注意到ToString()已经给出了正确的答案.
也许更冗长的解决方案的论点是可读性:当你调用应该是的ToString()东西时,你通常会期望 a ,尽管在这里它并没有抛出.nullNullReferenceException
不,你是对的,较短的版本与其他人在这方面的做法相同.我倾向于使用的另一个构造代替具有nullables的三元组是空合并运算符.它还可以保护您免受空值的影响.对于ToString(),它没有必要(正如你所指出的那样)但是对于默认的int值(例如),它可以很好地工作,例如:
int page = currentPage ?? 1;
Run Code Online (Sandbox Code Playgroud)
这允许你在页面上执行所有整数操作w/o首先显式空检查并调用currentPage中的值(其中currentPage是一个int?可能作为参数传递)
我知道,很久以后它是相关的,但是......我怀疑这是因为像int这样的可空类型?.ToString()方法不允许您使用格式字符串.请参阅如何使用ToString()格式化可为空的DateTime?.也许在原始代码中,.ToString()中有一个格式字符串,或者编码器忘了没有格式字符串的.ToString()仍然可以在可空类型上使用.
| 归档时间: |
|
| 查看次数: |
28534 次 |
| 最近记录: |