2016-09-29 117 views
1

我有这样的代码:保持默认值失败

string myStr = "sdfs"; 
double myDouble = 3; 
double.TryParse(myStr, out myDouble); 

因此,解析会失败,而且我分配到“myDouble”将变为0。

值是有一个很好的方法来保持3的默认值,即使解析失败?无需if子句像

if(!double.TryParse(myStr, out myDouble)) 
{ 
    myDouble = 3; 
} 
+0

您是否正在寻找简短的代码,这可能会导致它难以维护,或易于维护的代码可以重新使用?根据你如何定义“一种不错的方式”,可以使用不同的选项。 –

+0

我正在寻找保留“3”的分配值,例如在解析失败后,可能存在尽可能少的代码行,所以就像易于维护和重用一样。 – Clock

+0

在这种情况下,编写自己的函数来做这件事是一个好主意,就像SomeUser发布在他们的答案中一样。它的复杂性隐藏起来,你的任务只需要像'double myDouble = ParseAsDoubleOrDefault(myStr,3)'。当然,你需要修改建议的函数来返回值,而不是解析成功。 –

回答

2

它仍然是一种if条款,但行数较少。这适用于我:

string myStr = "sdfs"; 
    double myDouble = Double.TryParse(myStr, out myDouble) ? myDouble : 3; 
+0

它可能工作,但你应该使用一个有意义的名称而不是“幻数”3的变量。 –

1

真正做到这一点是这样的唯一途径:

string myStr = "sdfs"; 
double myDouble; 
double myDoubleDefaultValue = 3; 
if (!double.TryParse(myStr, out myDouble)) 
{ 
    myDouble = myDoubleDefaultValue; 
} 

的原因是,与出变量,方法必须完成之前分配一个值。

+1

这与OP已经提出的建议没有多大区别。 – juharr

+0

是的,但我也在为它分配值添加解释。 – kemiller2002

+0

@juharr它比OP的神奇数字3好得多。 –