我有一个字符串值,需要将其转换为十进制。
var str = null;
decimal number;
decimal d = Decimal.TryParse(str, out number) ? number : 0M;
它工作正常。
现在我试图通过使用C#6.0的新Null-Conditional Operator来实现同样的目标。我怎么能这样做?
我知道这是一次错误的尝试。
var str = null;
decimal d = str?.Convert.ToDecimal(str);
答案 0 :(得分:5)
空白(空)字符串不是null
,因此您无法使用该运算符。
你可以这样做:
decimal d = string.IsNullOrEmpty(str) ? 0M : Convert.ToDecimal(str);
编辑:好的,现在我们开始使用null
字符串。在这种情况下......
decimal d = (str == null) ? 0M : Convert.ToDecimal(str);
我仍然不认为这是使用空条件运算符的合适时间,因为当表达式的最终结果为null时,这是最有用的 - 在您的情况下不是这样。
答案 1 :(得分:3)
According to msdn你不能这样做,因为空条件运算符是:
用于在执行成员访问(?。)或索引之前测试null (?[]操作
在这种情况下,您不会索引或访问输入字符串成员。
正如另一个答案所述,这样做的方法是
decimal d = String.IsNullOrEmpty(str) ? default(decimal) : Convert.ToDecimal(str);
答案 2 :(得分:0)
不完全回答这个问题,但我会创建一个扩展方法,您可以在null
值上正式调用它。
如果输入字符串的格式有效(使用默认格式),则此实现提供正确的double
,如果字符串为null或为空或格式不正确,则提供可选的传递默认值。
public static double ConvertToDoubleOrDefault(this string input, double def = 0.0)
{
if (string.IsNullOrEmpty(str)) return def;
double result;
if (!double.TryParse(str, out result)) return def;
return result;
}
....
string test = "1234";
string test2 = null;
var d = test.ConvertToDoubleOrDefault(); // => 1234
d = test2.ConvertToDoubleOrDefault(); // => 0.0