我正在编写的应用程序中有以下代码部分:
...
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#中的一个错误还是我做错了什么?
答案 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