我试图将字符串转换为double。如果遇到空值,则该值应为0(零)。但是,它会出现一条错误消息:
"运营商''不能应用于' double'类型的操作数和' double'。这有点令人困惑,因为这两个数字都是双倍的?我该如何解决这个问题?
double final = double.Parse(min.ToString()) ?? 0.0;
答案 0 :(得分:8)
也许这样,假设min
是string
:
double final = double.Parse(min ?? "0");
或者也许:
double final = (min == null) ? 0 : double.Parse(min);
修改强>
更好:
double final = Convert.ToDouble(min);
每the documentation,该方法将返回
一个双精度浮点数,相当于 数值,或0(零)如果值为空。
答案 1 :(得分:0)
出现此错误是因为左侧?必须是Nullable类型,可以将 null 作为值。
你的代码中的:
double final = double.Parse(min.ToString()) ?? 0.0;
您正在使用调用Null-coalescing operator的??
运算符,此运算符执行的操作是检查double.Parse(min.ToString())
__评估某个值是否为double
的类型(这是一个值) type)_是否为null。如果它不为空,则将值分配给final
,否则将0.0
分配给它。
由于double
是值类型而值类型变量不能为空,除非它们是Nullable,否则您将收到错误,这就是您收到此错误的原因:< / p>
&#34;运营商&#39;&#39;不能应用于&#39; double&#39;类型的操作数和&#39; double&#39;。&#34;
要解决此问题,您可以尝试:
double final = Convert.ToDouble(min);
如果min
为空,则返回零。
PS:尽量避免使用Parse
方法,该方法在解析失败时抛出System.FormatExceptoin
,而是使用TryParse
:
string min = "2.s"; // not a number
double finals;
bool successed = double.TryParse(min, out finals); // true if successed, otherwise false.
Console.WriteLine(successed? $"Yes! finals = {finals}": $"No :( finals = {finals}");
// finals is 0 if the parse didn't work.