簡體   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