在Double.TryParse中获取"ref"关键字

cwa*_*ole 6 c# ref out

我有一个包含以下代码的库:

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;
Run Code Online (Sandbox Code Playgroud)

在我的Visual Studio 2015本地副本中,编译很好.上周构建服务器也会让这个编译没有问题.突然,周一构建服务器开始出错:

QueryParser.cs(449,53):错误CS1620:必须使用'ref'关键字[$ projectPath\Core40.csproj]传递参数2

当我进行切换(使用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.


显然,构建命令是:

msbuild  /m /p:Configuration=Release /p:Platform="Any CPU" $path\$solution.sln
Run Code Online (Sandbox Code Playgroud)

此外,我可以TryParse用一个try { return double.Parse(value); } catch (Exception) { return DEFAUlT; }块替换(我的临时前进方式),但这实际上并没有解决问题.

cwa*_*ole 1

事实证明,这是某种类型的坏缓存问题。最终,DevOps 重新启动了构建机器,问题就消失了。我很想知道真正的根本原因,但解决方案仍然是“关闭并再次打开它”。