避免冗余类型转换代码

时间:2018-06-04 21:23:51

标签: c# parsing type-conversion

我在我们的一个应用程序中遇到过这段代码,并认为这是多余的。

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的目的是什么。 (除了检查我们是否可以先解析它)我们不能只减少其中一个解析条件并使用条件运算符吗?

1 个答案:

答案 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的数字。这个   参数未经初始化传递;最初提供的任何值   结果将被覆盖。