使用双倍.解析如果值为空,则值替换为 0

本文关键字:替换 如果 | 更新日期: 2023-09-27 17:57:06

我正在尝试将字符串转换为双精度。如果遇到空值,则值应为 0(零)。但是,它会出现一条错误消息:

"运算符'??'不能应用于类型为'double'和'double'的操作数。这有点令人困惑,因为两个数字都是双倍的?我该如何解决这个问题?

double final = double.Parse(min.ToString()) ?? 0.0;

使用双倍.解析如果值为空,则值替换为 0

也许这个,假设min是一个string

double final = double.Parse(min ?? "0");

或者也许:

double final = (min == null) ? 0 : double.Parse(min);

编辑

甚至更好:

double final = Convert.ToDouble(min);

根据文档,该方法将返回

双精度浮点数,等效于 值中的数字,如果值为 null,则为 0(零)。

出现

此错误是因为 ?? 的左侧必须是 Null 类型,可以将 null 作为值。

在您的代码中:

double final = double.Parse(min.ToString()) ?? 0.0;

您正在使用??称为 Null 合并运算符的运算符,该运算符的作用是检查值double.Parse(min.ToString()) __evaluates是否具有 double 的类型(这是一种值类型)_ 是否为 null。 如果它不是 null,则将值分配给 final ,否则分配给它0.0

由于double是值类型,并且值类型变量不能为 null,除非它们是可为 Null,因此您将收到错误,这就是您收到此错误的原因:

"运算符'??'不能应用于类型'double'和'double'的操作数。

要解决此问题,您可以尝试以下操作:

 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.