Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 避免冗余类型转换代码_C#_Parsing_Type Conversion - Fatal编程技术网

C# 避免冗余类型转换代码

C# 避免冗余类型转换代码,c#,parsing,type-conversion,C#,Parsing,Type Conversion,我在我们的一个应用程序中遇到过这段代码,认为它是多余的 string oldAdjRate = SomeDataTable.Rows[0]["SomeColumn"].ToString(); double oAdjRate; if (double.TryParse(oldAdjRate, out oAdjRate)) { oAdjRate = double.Parse(oldAdjRate); } 这是对其他几个值执行的,因此需要占用大量的空间 这不能简化为以下几点吗 string o

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

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
在原始代码中解析它。(除了检查我们是否可以首先解析它)我们不能只减少一个解析条件并使用条件运算符吗?

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.
以下是相关信息:

[……]

结果
此方法返回时,包含双精度浮点值 如果转换成功,则s参数的等效数字,或 如果转换失败,则为零。如果s参数 为空或字符串。为空,不是有效格式的数字,或 表示小于MinValue或大于MaxValue的数字。这 未初始化地传递参数;最初在中提供的任何值 结果将被覆盖


首先,为什么要将数字数据作为字符串存储在该数据源中?将数值数据存储为数值,否则会遇到各种问题。@Servy这也是我注意到的。tl;dr:是的,你可以把它简化为三元:)。不,三元是不需要的,因为在failure@MikeMcCaughan在真实的情况下,它为自己分配一个变量,这是毫无意义的。正如pm100所说,在错误的情况下,它将零赋值给一个已经为零的变量,这也是无意义的,无意义的,但可能的。问题是“我们不能减少一个解析条件并使用条件运算符吗?”答案是“是的,如果你真的想的话”。您可以使用
Parse
,而不是在
else
情况下抛出异常,因为这是它无论如何都要做的。
public static bool TryParse(
  string s,
  out double result
)