使用双倍.解析如果值为空,则值替换为 0
本文关键字:替换 如果 | 更新日期: 2023-09-27 17:57:06
我正在尝试将字符串转换为双精度。如果遇到空值,则值应为 0(零)。但是,它会出现一条错误消息:
"运算符'??'不能应用于类型为'double'和'double'的操作数。这有点令人困惑,因为两个数字都是双倍的?我该如何解决这个问题?
double final = double.Parse(min.ToString()) ?? 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.