我想在这个问题的下面寻求代码的帮助...我遇到一些错误,提示“参数1:不能将double转换为double?”。我该如何解决这个问题呢?
private void Calculate(string newOperator = null)
{
double? result = null;
double? first = numbers[0] == null ? null : (double?)double.Parse(numbers[0]);
double? second = numbers[1] == null ? null : (double?)double.Parse(numbers[1]);
switch (@operator)
{
case "÷":
result = first / second;
break;
case "×":
result = first * second;
break;
case "+":
result = first + second;
break;
case "-":
result = first - second;
break;
case "√":
result = Math.Sqrt(first);
break;
case "SIN":
result = Math.Sin(first);
break;
case "COS":
result = Math.Cos(first);
break;
case "TAN":
result = Math.Tan(first);
break;
}
答案 0 :(得分:1)
如果这就是您的意思,则可以使用.Value
访问可为null的类型的值。
例如Math.Sqrt(first.Value)
编辑:
我不认为需要这么说,但是由于评论员的敦促,我将其添加:
由于可为空的类型可以为空,因此您应该检查您的double类型吗?在使用它之前实际上有一个值。
例如,first.HasValue
将返回一个布尔值,告诉您是否可以为null的值。
答案 1 :(得分:-1)
您可以像这样将double?
转换为double
:
double ConvertNullableDoubleToDouble(double? input)
{
return input.Value;
}
这有点混乱,因为输入可能是null
。确实,您应该做的是添加一个默认值或使它超显式处理空值的内容。
private static double ConvertNullableDoubleToDouble(double? input, double? defaultIfNull = null)
{
if (input != null && input.HasValue)
return input.Value;
else if (defaultIfNull != null && defaultIfNull.HasValue)
return defaultIfNull.Value;
else
throw new Exception(string.Format($"Unable to parse input {input}"));
}