首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >避免冗余的类型转换代码

避免冗余的类型转换代码
EN

Stack Overflow用户
提问于 2018-06-05 05:23:51
回答 1查看 66关注 0票数 0

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

代码语言:javascript
复制
string oldAdjRate = SomeDataTable.Rows[0]["SomeColumn"].ToString();
double oAdjRate;
if (double.TryParse(oldAdjRate, out oAdjRate))
{
    oAdjRate = double.Parse(oldAdjRate);
}

这是为其他几个值做的,所以它占用了大量的空间。

不能将其简化为以下内容吗?

代码语言:javascript
复制
string oldAdjRate = SomeDataTable.Rows[0]["SomeColumn"].ToString();
double oAdjRate = double.TryParse(oldAdjRate, out oAdjRate) ? oAdjRate: 0;

在原始代码中执行double.TryParse的目的是什么,然后实际上只是double.Parse它。(除了检查我们是否可以先解析它),我们不能只减少一个解析条件,而使用条件运算符吗?

EN

回答 1

Stack Overflow用户

发布于 2018-06-05 05:29:41

TryParse()始终为oAdjRate赋值。您不需要自己分配它。

现在,值可能不是您想要的。如果TryParse返回true,则转换成功,并且oAdjRate的值将是正确的。但是,如果TryParse返回false,则oAdjRate的值将为零。

你必须决定当转换失败时该怎么做。例如,这里我决定抛出一个异常。

代码语言:javascript
复制
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,则转换将失败。此参数在未初始化的情况下传递;结果中最初提供的任何值都将被覆盖。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50688971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档