如何在空白字符串上应用空条件运算符?
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
我有一个字符串值,需要将其转换为十进制。
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