我在我正在编写的应用程序中有以下代码部分:
...
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#中的一个错误还是我做错了什么?
首先,您不能将 a 隐式转换double?为 a double。原因是因为double如果double?代表null值(即,value.HasValue为假),那么值是多少?也就是说,从 a 转换为 adouble?会double导致信息丢失(这是一种缩小转换)。框架中通常不赞成隐式缩小转换。
但实际上,您在这里看到的问题有所不同。当你有一个方法接受一个out类型的参数时T,你必须传入一个类型的变量T;在这种情况下不能有任何类型变化,因为有ref非out参数和非参数。
要解决您的问题,请使用以下方法:
if (AltFrom == null) {
double value;
Double.TryParse(Columns[LatIndex].Trim(), out value);
AltFrom = value;
}
Run Code Online (Sandbox Code Playgroud)
没有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)