【问题标题】:Visual Studio 2017 15.3 Simplifying null checkVisual Studio 2017 15.3 简化空值检查
【发布时间】:2017-08-15 09:54:01
【问题描述】:

我有这个代码:

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

Visual Studio 显示 3 个灰点并建议简化 null 检查。

它使方法如下:

_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

【问题讨论】:

  • _container = 容器??抛出新的 ArgumentNullException("container");应该正确构建。看起来像有效代码
  • 你建设得怎么样了?对于 Visual Studio,这是一种奇怪的错误消息格式。我的猜测是,您使用的任何构建过程仍在使用 C# 6 编译器。
  • @Jon Skeet。我正在使用 VS2017 构建并按 F5。有趣的是,错误窗口中没有显示错误,但 Build 下的输出窗口中显示了 2 个错误。
  • @DavidG。我通过 nuget 安装了 unity 和 Unity.WebAPI,这对我使用的编译器有何影响? (我使用的是 Unity DependencyInjection 框架而不是游戏引擎)。
  • @Stuart 是的,忽略我 :)

标签: c# null visual-studio-2017


【解决方案1】:

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

或者干脆更新微软编译器版本,因为它没有包含在 VS 2017 中...

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

【讨论】:

  • 现在试试这个:)
  • 更新后同样的错误。 nuget 安装也很顺利。
  • 看看这个thread好像和你的问题一模一样
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-19
相关资源
最近更新 更多