2017-08-15 92 views
9

我有这样的代码:的Visual Studio 2017 15.3简化空校验

public UnityResolver(IUnityContainer container) 
{ 
    if (container == null) throw new ArgumentNullException("container"); 
    _container = container; 
} 

Visual Studio中示出了3点灰度的点,并建议简化空校验。

这使得该方法是:

_container = container ?? throw new ArgumentNullException("container"); 

这不建...

这是怎么回事?它为什么认为它可以简化这一点,为什么它将其简化为不构建的东西。

的错误是给人是:

1>L:\SL1-(SentiLAN)-SentiLAN v1 - Current System\SentilanCore\WEB API with Plugins\APITest2\App_Start\UnityConfig.cs(31,39,31,44): error CS1525: Invalid expression term 'throw' 
1>L:\SL1-(SentiLAN)-SentiLAN v1 - Current System\SentilanCore\WEB API with Plugins\APITest2\App_Start\UnityConfig.cs(31,39,31,44): error CS1002: ; expected 

enter image description here

+1

_container =容器?抛出新的ArgumentNullException(“容器”);应该正确地构建。看起来像有效的代码 –

+2

你好吗?这是Visual Studio的一个奇怪的错误消息格式。我的猜测是,无论您使用的构建过程是使用C#6编译器。 –

+1

@Jon Skeet。我正在使用VS2017并击中F5。有趣的是在错误窗口中没有显示错误,但在Build下的输出窗口中显示了2个错误。 – Stuart

回答

6

它的编译器的问题,代码是有效的。他们更新了版本并修复了最新更新(几个小时前)中的错误。您可以在弹出通知或从网站上下载更新。

或者干脆更新Microsoft编译器版本,因为它不是在VS 2017年列入...

Install-Package Microsoft.Net.Compilers -Version 2.3.0是最新的,我认为

+0

立即尝试:) – Stuart

+0

更新后出现同样的错误。 nuget安装也很顺利。 – Stuart

+0

甚至尝试重启VS,同样的错误。 – Stuart