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

时间:2009-10-21 21:10:22

标签: c#-3.0

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

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

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

如果我没有将AltFrom设为Nullable类型而是明确地将其声明为Double,那么一切都很开心。

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

2 个答案:

答案 0 :(得分:5)

out参数确实不一定是double,而不是Nullable<double>

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

答案 1 :(得分:3)

首先,您无法将double?隐式转换为double。原因是,如果double代表double?值(即null为假),value.HasValue的价值是多少?也就是说,从double?转换为double会导致信息丢失(这是一个缩小的转换)。隐含的缩小转换通常在框架中不受欢迎。

但实际上,你在这里看到的问题是不同的。如果您的方法接受类型为out的{​​{1}}参数,则必须传入T类型的变量;在这种情况下,不存在任何类型变体,因为存在非T和非ref参数。

要解决您的问题,请使用以下命令:

out