gpt4 book ai didi

C# : Why is First namespace redundant?

转载 作者:太空狗 更新时间:2023-10-29 23:30:29 24 4
gpt4 key购买 nike

这有点吓人。

我认为某处一定有一个设置可以解释为什么会发生这种情况。

在我们的解决方案中,大约有 50 个不同的项目。大多数情况下,这些库以命名空间 OurCompany 开头。

我们有 OurComany.This.That 和 OurCompany.Foo.Bar...等

外部库与命名空间之间存在命名空间/类冲突

OurCompany.Foo.Bar

还有一个像这样合格的类..

OurCompany.Some.Location.Foo

错误是这样的:

Error   75  The type or namespace name 'MethodName' does not exist in the
namespace 'OurCompany.Foo' (are you missing an assembly reference?)

当我完全限定“OurCompany”命名空间下的任何内容时,甚至 Resharper 也会给我一条“Qualifier is redundant”消息。即

OurCompany.Some.Location.Foo.MethodName();
//OurCompany is redundant

我不知道到底是什么在做这个。解决方案非常庞大,因此将问题拆开来尝试对问题进行逆向工程对我来说不是一个很好的解决方案。

我应该声明,如果我使用...

Some.Location.Foo.MethodName(); //Leaving out OurCompany

...Resharper 消息消失。

最佳答案

我以为我明白这里发生了什么,但现在我看到了一些奇怪的行为,这让我质疑我对 C# 的命名空间范围行为的理解。

显然,基本问题是范围界定。据推测,您正在 OurCompany 下的某个命名空间中做某事;为了便于讨论,我们假设您在 OurCompany.This.That 中。自动地,直接在 OurCompany.This.ThatOurCompany.ThisOurCompany 中找到的任何类型或命名空间命名空间在范围内,不需要使用。这就是为什么一旦涉及到带有 OurCompany.Foo 命名空间的程序集(OurCompany 中的所有内容默认情况下都在范围内,包括 Foo 命名空间和命名空间 [apparently] 优先)以及为什么你会收到冗余命名空间警告(Some 命名空间是在 OurCompany 命名空间中定义的,所以它是自动在范围内)。

但是在尝试重现这种行为时,我遇到了一些奇怪的事情。我创建了一个文件来保存相关世界的其余部分:

namespace OurCompany
{
namespace Some
{
namespace Location
{
public class Foo
{
public static void MethodName() { }
}
}
}

namespace Foo
{
namespace Bar { }
}
}

并且发现以下内容(我收集到的与您正在做的类似)不起作用:

using OurCompany.Some.Location;

namespace OurCompany
{
namespace This
{
namespace That
{
class BeepBoop
{
private void DoSomething()
{
Foo.MethodName(); // No good; Foo is a namespace here.
}
}
}
}
}

...但是这样做了:

namespace OurCompany
{
namespace This
{
namespace That
{
using OurCompany.Some.Location;
class BeepBoop
{
private void DoSomething()
{
Foo.MethodName(); // Puh-wha? This works?
}
}
}
}
}

我承认我不知道这里发生了什么。但显然,范围界定并不像“范围内的就是范围内的,命名空间优先。”

关于C# : Why is First namespace redundant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30880676/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com