我在我们的一个应用程序中遇到了这段代码,并认为它是多余的。
string oldAdjRate = SomeDataTable.Rows[0]["SomeColumn"].ToString();
double oAdjRate;
if (double.TryParse(oldAdjRate, out oAdjRate))
{
oAdjRate = double.Parse(oldAdjRate);
}
这是为其他几个值做的,所以它占用了大量的空间。
不能将其简化为以下内容吗?
string oldAdjRate = SomeDataTable.Rows[0]["SomeColumn"].ToString();
double oAdjRate = double.TryParse(oldAdjRate, out oAdjRate) ? oAdjRate: 0;
在原始代码中执行double.TryParse
的目的是什么,然后实际上只是double.Parse
它。(除了检查我们是否可以先解析它),我们不能只减少一个解析条件,而使用条件运算符吗?
发布于 2018-06-05 05:29:41
TryParse()
始终为oAdjRate
赋值。您不需要自己分配它。
现在,值可能不是您想要的。如果TryParse返回true,则转换成功,并且oAdjRate
的值将是正确的。但是,如果TryParse返回false,则oAdjRate
的值将为零。
你必须决定当转换失败时该怎么做。例如,这里我决定抛出一个异常。
string strVal = "12.3";
double dVal;
if (double.TryParse(strVal , out dVal))
{
// Here, the value of dVal is 12.3
System.Diagnostics.Debug.WriteLine(dVal);
}
else
{
// Here, the value of dVal is 0.0
throw new ArgumentException()
}
// Here, we don't know what dVal is. It could be 12.3 or 0.0.
下面是相关的MSDN documentation
公共静态布尔值TryParse(字符串% s,输出双精度结果)
..。
结果
当此方法返回时,如果转换成功,则包含s参数的等效双精度浮点数;如果转换失败,则包含零。如果%s参数为null或String.Empty,不是有效格式的数字,或者表示的数字小于MinValue或大于MaxValue,则转换将失败。此参数在未初始化的情况下传递;结果中最初提供的任何值都将被覆盖。
https://stackoverflow.com/questions/50688971
复制相似问题