This question already has answers here:
Resolving an ambiguous reference
                                
                                    (3个答案)
                                
                        
                                4年前关闭。
            
                    
如何查看Visual Studio 2013中哪些using语句提供了一个类?

我该如何发现冲突?

我有这种代码

foo.cs

namespace foo
{
    class XmlConverter
    {
    }
}


bar.cs

namespace bar
{
    class XmlConverter
    {
    }
}


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

编辑:我知道我可以重命名我的类(或使用别名),但我如何检测到此问题(使用了错误的类)?可能吗?

最佳答案

您可以为此使用别名。语法如下: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。否则,只是在打字。对于您的示例,仅不使用using语句更有意义。

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

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

10-07 19:30
查看更多