获得“ref"在Double.TryParse中必需的关键字
本文关键字:TryParse 关键字 Double ref quot 获得 | 更新日期: 2023-09-27 18:04:09
我有一个库,代码如下:
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):错误CS1620:参数2必须通过'ref'关键字传递[$projectPath'Core40.csproj]
当我切换(使用ref
而不是out
),构建服务器能够完成构建没有错误,但Visual Studio将不再编译。
从我阅读的相关文档,double.TryParse
有总是采取out
关键字,所以一定有一些关于构建服务器的库,但我不确定什么或如何去诊断它。
问完下面的一些问题后,我回到班上,确认有多个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)
实例。我也能够将"double"替换为"float",它工作得很好。这是double
特有的。
显然,构建命令是:
msbuild /m /p:Configuration=Release /p:Platform="Any CPU" $path'$solution.sln
另外,我可以用try { return double.Parse(value); } catch (Exception) { return DEFAUlT; }
块替换TryParse
(我的临时前进方式),但这实际上并不能解决问题。
原来这是某种类型的坏缓存问题。最终,DevOps重新启动了构建机器,问题就解决了。我很想知道真正的根本原因,但解决方案仍然是"关闭并再次打开它"。