为什么VS-Intellisense有时“使用”命名空间并将其添加到C#中的类型

时间:2017-07-18 08:39:47

标签: c# namespaces intellisense

为什么VS-intellisense有时会在页面顶部写using,有时会像C#中的new namespace.class一样内联添加?

例如

using Namespace;
Obj obj = new Obj();

obj = new Namespace.Obj();

2 个答案:

答案 0 :(得分:1)

有时两个名称空间具有相同的类。因此,为避免歧义,将名称空间添加到类中。

实施例: 想象一下,你有Namespace1和Namespace2,它们都有类Employee

using Namespace1;
using Namespace2;

namespace MyNamespace
{
  public class MyClass
  {
    private Employee emp1; // does it come from Namespace1 or Namespace2 ? 
  }
}

在这种情况下可以完成两个解决方案

一个是明确定义名称空间

using Namespace1;
using Namespace2;

namespace MyNamespace
{
  public class MyClass
  {
    private Namespace1.Employee emp1; 
  }
}

另一个是您从一开始就定义您正在使用某个名称空间中的Employee,如下所示。

using Namespace1;
using Namespace2;
using Employee = Namespace1.Employee; 

namespace MyNamespace
{
  public class MyClass
  {
    private Employee emp1; //Notice the definition above
  }
}

答案 1 :(得分:1)

Visual Studio 2015有一个错误,它可以做到这一点。

无论您是否在代码文件的顶部包含using语句,该错误都会导致它在您的定义前添加命名空间。

几周前

I asked a similar question,并根据其他用户的建议,提交了相关github项目的问题。

我的问题几乎立即被关闭了一个相当狡猾的评论,基本上说"更新到Visual Studio 2017因为我们在那个版本修复了它#34;。