在Double.TryParse中获取“ref”关键字

时间:2016-08-27 02:59:09

标签: 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;

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

  

QueryParser.cs(449,53):错误CS1620:必须使用'ref'关键字传递参数2 [$ 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)和{ {1}}。我也能用“浮动”替换“双”,它工作得很好。这是Guid.TryParse(value, out result)特有的内容。

显然,构建命令是:

double

另外,我可以用msbuild /m /p:Configuration=Release /p:Platform="Any CPU" $path\$solution.sln 块替换TryParse(我的临时前进方式),但这实际上并没有解决问题。

1 个答案:

答案 0 :(得分:1)

事实证明这是某种类型的错误缓存问题。最终,DevOps重新启动了构建机器,问题就消失了。我希望有一个真正的根本原因,但决议仍然“关闭并再次打开它。”