场景
将字符串分析为可为空的数值类型。如果解析不成功,则结果应为空;否则,结果应该是解析的值。
问题
为了做到这一点,我总是使用以下简单但冗长的方法:
string numericString = "...";
decimal? numericValue;
decimal temp;
if (decimal.TryParse(numericString, out temp))
{
numericValue = temp;
}
else
{
numericValue = null;
}
我使用上面的方法是因为下面的代码编译不了:
decimal temp;
decimal? numericValue = decimal.TryParse(numericString, out temp) ? temp : null;
有没有人知道第一段代码的版本和第二段代码一样简短、整洁和可读?我知道我总是可以编写一个扩展方法来封装第一段代码,但我想知道是否有任何方法可以在没有扩展方法的情况下完成我想要的任务。
8条答案
按热度按时间a64a0gku1#
一个简单的显式类型转换使其可编译:
另一种选择是在所需的可空类型上使用
default
运算符:bf1o4zei2#
我会这么做
或者你可以把它变成一个扩展方法:
zdwk9cvp3#
只需将其分解为一个扩展方法:
你可以这样使用它:
pb3s4cty4#
怎么样:
如果强制转换失败,这将使numericValue为
null
,并且很好很干净。waxmsbnn5#
问题是temp是一个十进制数,而null...是null。因为它们的类型不同,所以两者之间的比较失败,您会得到一个错误。
尝试以下两种方法之一:
或
xtfmy6hx6#
我认为你应该把它 Package 在一个方法中以获得更好的可读性:
py49o6xq7#
decimal?weight = decimal.TryParse(weightEditText.Text,out var tempWeight)?tempWeight:default(decimal?)
vbkedwbf8#
一个很好的使用最近C#特性的一行程序是: