获取 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."