如何在空白字符串上应用空条件运算符?

How to apply Null-Conditional Operator on blank strings?

我有一个字符串值,需要将其转换为十进制。

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);

A blank(空)字符串不是 null,因此您不能使用该运算符。

你可以这样做:

decimal d = string.IsNullOrEmpty(str) ? 0M : Convert.ToDecimal(str);

编辑:好的,现在我们从 null 字符串开始。在这种情况下...

decimal d = (str == null) ? 0M : Convert.ToDecimal(str);

我仍然认为现在不是使用 null 条件运算符的合适时机,因为当表达式的最终结果可能为 null 时它最有用——这在您的情况下并非如此。

According to msdn 你不能这样做,因为 null 条件运算符是:

Used to test for null before performing a member access (?.) or index (?[) operation

在这种情况下,您不会索引或访问输入字符串成员。

正如其他答案所述,这样做的方法是

decimal d = String.IsNullOrEmpty(str) ? default(decimal) : Convert.ToDecimal(str);

不完全回答这个问题,但我会创建一个扩展方法,您也可以在 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