获取 Double.TryParse 中需要的 "ref" 个关键字
Getting "ref" keyword required in Double.TryParse
我有一个包含以下代码的库:
double result = -1;
if (!string.IsNullOrEmpty(fieldName))
{
string value = HttpContext.Current.Request.QueryString[fieldName];
if (string.IsNullOrEmpty(value))
{
value = HttpContext.Current.Request.Form[fieldName];
}
if (string.IsNullOrWhiteSpace(value) || !double.TryParse(value.Trim(), out result))
{
result = -1;
}
}
return result;
在我的 Visual Studio 2015 本地副本中,编译正常。上周构建服务器也可以毫无问题地进行编译。突然,周一构建服务器开始出现错误:
QueryParser.cs(449,53): error CS1620: Argument 2 must be passed with the 'ref' keyword [$projectPath\Core40.csproj]
当我进行该切换时(使用 ref
而不是 out
),构建服务器能够无错误地完成构建,但 Visual Studio 将不再编译。
根据我阅读的相关文档,double.TryParse
总是 使用 out
关键字,因此构建服务器的库一定有问题,但我不确定如何诊断它。
经过下面的一些问题,我回到class,确认有多个实例decimal.TryParse(value, out result)
、int.TryParse(value, out result)
、float.TryParse(value, out result)
、long.TryParse(value, out result)
和 Guid.TryParse(value, out result)
。我还能够用 "float" 替换 "double",而且效果很好。这是 double
.
特有的内容
显然,构建命令是:
msbuild /m /p:Configuration=Release /p:Platform="Any CPU" $path$solution.sln
此外,我可以将 TryParse
替换为 try { return double.Parse(value); } catch (Exception) { return DEFAUlT; }
块(我的临时方法),但这并不能真正解决问题。
事实证明这是某种类型的错误缓存问题。最终,DevOps 重新启动了构建机器,问题就消失了。我很想知道真正的根本原因,但解决方案仍然是 "turning off and turning it on again."
我有一个包含以下代码的库:
double result = -1;
if (!string.IsNullOrEmpty(fieldName))
{
string value = HttpContext.Current.Request.QueryString[fieldName];
if (string.IsNullOrEmpty(value))
{
value = HttpContext.Current.Request.Form[fieldName];
}
if (string.IsNullOrWhiteSpace(value) || !double.TryParse(value.Trim(), out result))
{
result = -1;
}
}
return result;
在我的 Visual Studio 2015 本地副本中,编译正常。上周构建服务器也可以毫无问题地进行编译。突然,周一构建服务器开始出现错误:
QueryParser.cs(449,53): error CS1620: Argument 2 must be passed with the 'ref' keyword [$projectPath\Core40.csproj]
当我进行该切换时(使用 ref
而不是 out
),构建服务器能够无错误地完成构建,但 Visual Studio 将不再编译。
根据我阅读的相关文档,double.TryParse
总是 使用 out
关键字,因此构建服务器的库一定有问题,但我不确定如何诊断它。
经过下面的一些问题,我回到class,确认有多个实例decimal.TryParse(value, out result)
、int.TryParse(value, out result)
、float.TryParse(value, out result)
、long.TryParse(value, out result)
和 Guid.TryParse(value, out result)
。我还能够用 "float" 替换 "double",而且效果很好。这是 double
.
显然,构建命令是:
msbuild /m /p:Configuration=Release /p:Platform="Any CPU" $path$solution.sln
此外,我可以将 TryParse
替换为 try { return double.Parse(value); } catch (Exception) { return DEFAUlT; }
块(我的临时方法),但这并不能真正解决问题。
事实证明这是某种类型的错误缓存问题。最终,DevOps 重新启动了构建机器,问题就消失了。我很想知道真正的根本原因,但解决方案仍然是 "turning off and turning it on again."