繁体   English   中英

如何别名枚举名称以覆盖具有相同名称的本地命名空间枚举?

[英]How to alias a enum name to override local namespace enum with the same name?

我正在做一个主要的重构,我将一个名为“Main.TestEnum”的枚举替换为来自另一个命名空间的枚举,称为“Library.TestEnum”。 我现在需要暂时保留两个枚举,以后我可以用“Library.TestEnum”替换每个实例。

我希望我可以使用“使用”别名在枚举之间来回切换:

using TestEnum = Library.TestEnum; //Create the alias
namespace Main {
class Program
    {
        static void Main(string[] args)
        {
            TestEnum testEnum = TestEnum.Uninitialized;
            Console.WriteLine(testEnum.GetType()); //Always outputs Main.TestEnum!
        }
    }
}

尽管有别名,但对于“Main”命名空间中的代码,非限定名称“TestEnum”总是指“Main.TestEnum”而不是“Library.TestEnum”。 如果在当前命名空间中使用该名称定义了其他内容,则别名似乎不起作用。 :(

我可以浏览我的所有代码并搜索并用“Library.TestEnum”替换“TestEnum”,但这看起来很烦人,使代码更难阅读,并使我不得不接触使用枚举的每个文件(有很多代码使用它。)

有没有人知道解决这个问题? 为什么 C# 编译器不支持这个? 不是每个非限定名称都是别名,我不应该能够覆盖当前名称空间中名称的别名吗?

为了相对容易地解决这个问题,我只是将“Main.TestEnum”移动为“SomeUnusedNameSpace.TestEnum”。 这将两个版本的 TestEnum 移出“Main”命名空间,这意味着对“TestEnum”的任何引用都必须是显式的,因为编译器无法自动默认为当前命名空间中的版本。 我不得不添加“使用 TestEnum = Library.TestEnum;” 到相当多的文件来修复编译器错误,但它只是添加了一行而不是巨大的重命名,这使得合并更容易。

我仍然不知道这是编译器“错误”还是只是我应该向编译器团队提出的请求,但我觉得“使用”别名应该覆盖当前命名空间中的符号,或者至少抛出编译器错误如果别名与当前符号名称冲突或至少警告别名不会做任何事情。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM