无法从'出双转换'?'双出'

Gin*_*eer 0 c#-3.0

我在我正在编写的应用程序中有以下代码部分:

    ...
    String[] Columns = Regex.Split(CurrentLine, Delimeter);
    Nullable<Double> AltFrom;
    ...
    if (AltFrom == null)
    {
       Double.TryParse(Columns[LatIndex].Trim(), out AltFrom);
    }
    ...
Run Code Online (Sandbox Code Playgroud)

if子句中的行不会编译并显示错误:无法从'out double?'转换 '双出'

如果我不使AltFrom成为Nullable类型而是明确地将其声明为Double,那么一切都很愉快.

当然这是有效的代码.这只是c#中的一个错误还是我做错了什么?

jas*_*son 5

首先,您不能将 a 隐式转换double?为 a double。原因是因为double如果double?代表null值(即,value.HasValue为假),那么值是多少?也就是说,从 a 转换为 adouble?double导致信息丢失(这是一种缩小转换)。框架中通常不赞成隐式缩小转换。

但实际上,您在这里看到的问题有所不同。当你有一个方法接受一个out类型的参数时T,你必须传入一个类型的变量T;在这种情况下不能有任何类型变化,因为有refout参数和非参数。

要解决您的问题,请使用以下方法:

if (AltFrom == null) {
   double value;
   Double.TryParse(Columns[LatIndex].Trim(), out value);
   AltFrom = value;
}
Run Code Online (Sandbox Code Playgroud)


tva*_*son 5

没有out参数真的需要是a double,而不是a Nullable<double>.

double? altFrom = null;
double temp = 0;
if (double.TryParse( Columns[LatIndex].Trim(), out temp))
{
    altFrom = temp;
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,由于它是一个 out 参数,因此将其初始化为 0 毫无意义。 (2认同)