我在我们的一个应用程序中遇到过这段代码,并认为这是多余的。
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
的目的是什么。 (除了检查我们是否可以先解析它)我们不能只减少其中一个解析条件并使用条件运算符吗?
答案 0 :(得分:1)
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:
public static bool TryParse( string s, out double result )
[...]
结果
当此方法返回时,包含双精度浮点 等价于s参数的数字,如果转换成功,或者 如果转换失败,则为零。如果s参数转换失败 是null或String.Empty,不是有效格式的数字,或 表示小于MinValue或大于MaxValue的数字。这个 参数未经初始化传递;最初提供的任何值 结果将被覆盖。