【问题标题】:How to see which "using" is used in Visual Studio [duplicate]如何查看 Visual Studio 中使用了哪个“使用”[重复]
【发布时间】:2015-08-25 19:18:52
【问题描述】:

我如何查看哪些using 语句在 Visual Studio 2013 中提供了一个类?

我如何检测冲突?

我有这种代码

foo.cs:

namespace foo
{
    class XmlConverter 
    {
    }
}

bar.cs:

namespace bar
{
    class XmlConverter 
    {
    }
}

而且我需要同时使用 foobar 命名空间(两者都有多个类)。

编辑:我知道我可以重命名我的类(或使用别名),但我怎样才能检测到这个问题(使用了错误的类)?有可能吗?

【问题讨论】:

  • 您需要提供完整的命名空间名称以避免歧义。
  • @HimBromBeere,你的意思是完全限定名吗,我已经提供了完整的命名空间?
  • 要查看引用项的定义位置,请将光标放在类型上并按 F12 - 转到定义。

标签: c# visual-studio visual-studio-2013


【解决方案1】:

您可以为此使用别名。语法如下所示:using MyAlias = MyNamespace.A

Using alias directives 和/或How to: Use the Global Namespace Alias

在你的情况下:

using FooConverter = foo;
using BarConverter = bar;

public ThirdPartyClass
{
     public void SomeMethod(FooConvert.XMLConverter fooConv, BarConverter.XMLConverter barConv)
     {
     }
}

当然,只有当您的实际命名空间由至少两个部分组成,或者命名空间的名称更长并且可以在不失去可读性的情况下缩短时,这才有意义。

例如,将System.IO 缩短为SysIO 或将ThisIsMyNamespace 缩短为MyNamespace。否则它只是更多的yping。在您的示例中,没有using 语句更有意义。

不可能以某种方式让编译器“检测”您使用的是 foo 的 XMLConverter 还是 bar 的 XMLConverter,而无需在类名前面放置某种分类器(无论是别名还是整个命名空间)。

致 OP 的更新:编译器会让您知道有问题。消息是Class1 is an ambiguous reference between Foo.Class1 and Bar.Class1

【讨论】:

  • 编译器总是取最后一个 using 吗?
  • @maaza 没有。如果编译器检测到不明确的引用,它将使编译过程失败。如果不是,则您没有对包含第二个命名空间/类的程序集的引用。或者两个类之一是internalprotectedprivate 或类似的东西。
  • 是的,实际上它们都是内部的。我想我的设置运气不好
  • 啊,这可能是个问题。 Internal 只允许您在定义它的程序集中使用一个类。See here
【解决方案2】:

如果有冲突,C# 会报错。在这种情况下,您的代码应使用完全限定名称,如 new foo.XmlConverternew bar.XmlConverter

但是,这是不好的做法。如果可以的话,您应该将类​​重命名为 FooXmlConverterBarXmlConverter

【讨论】:

  • 或者如果它基本上是相同的转换器复制然后重构并将其移动到一个公共位置......这是大型项目中的常见场景。
猜你喜欢
  • 2021-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 2013-08-31
  • 2012-08-10
  • 2018-12-11
  • 2012-08-17
相关资源
最近更新 更多