gpt4 book ai didi

c# - 为什么自动包含根命名空间

转载 作者:行者123 更新时间:2023-12-02 10:53:56 27 4
gpt4 key购买 nike

我的一位同事刚刚遇到了一个奇怪的编译器怪癖,它正在导入看起来像“根”命名空间的东西。

问题在于,当我们添加对共享库的引用时,该共享库的命名空间为 Root.Security ,它在每个文件中提示类 Root.Entity.X被使用(即使它没有 using Rootusing Root.Security

例子
Root.Entities集会
Security.cs

namespace Root.Entities
{
public class Security { } // Represents a Security in the sense of financial instrument
}
Root.Security集会

这个程序集有 Active Directory + Permission 共享助手,
SecurityHelper.cs
namespace Root.Security
{
public class SecurityHelper { } // AD/Permission helper
}
Root.Gui集会
Main.cs
using Root.Entities;

namespace Root.Gui
{
public class Main
{
public Main()
{
// The following causes an error
// if Root.Security is add as a reference to the project.
// even without adding `using Root.Security`
var security = new Security();
}
}
}

问题

我的问题是,为什么编译器会抛出错误并选择 Security up 作为命名空间,即使我们没有 using Rootusing Root.Security任何地方!似乎它正在添加 using Root某处自动?

注: 现在我们已经通过设置 using SecurityEntity = Root.Entities.Security 修复了它。

最佳答案

我无法解释“为什么?” - 我可以复制它,但有一些解决方法:

选项 1:完全限定类型:

var security = new Root.Entities.Security();

选项 2:移动您的 using命名空间声明中的指令:
namespace Root.Gui
{
using Root.Entities;
public class Main
{
public Main()
{
// The following causes an error
// if Root.Security is add as a reference to the project.
// even without adding `using Root.Security`
var security = new Security();
}
}
}

我有点惊讶 using别名方法 修理它:
using Security = Root.Entities.Security;

但是您可以使用选项 3 作弊:
using SecurityRenamed = Root.Entities.Security;
...
var security = new SecurityRenamed();

关于c# - 为什么自动包含根命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48499862/

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