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
)