2009-10-22 96 views
0

有沒有辦法我可以指向另一個枚舉枚舉?下面是需求和細節:C#枚舉指向另一個枚舉(重構)

目前:

  • 我有兩個公共類com.abcd.MyManager和com.abcd.data.MyObject。
  • MyObject類幾乎所有東西都是私有的,除了Types枚舉成員。
  • MyManager類使用MyObject類
  • 注意MyObject類位於單獨的名稱空間中。
  • 之一MyManager方法具有以下特徵:
    public void Init(string name, MyObject.Types type)
    {
    // does Init
    }

重構要求:

  • 只是因爲Init方法使用MyObject.Types而且它是生活在另一個命名空間的。開發人員必須在其代碼中包含兩個名稱空間。我喜歡將MyObject.Types枚舉移動到MyManager類。類似這樣的:
    public void Init(string name, MyManager.Types type)
    {
    // does Init
    }

我如何能做到這一點不打破目前的結構有什麼建議?謝謝。

+0

你的問題是開發人員如何使用MyManager的Init而不使用MyObject的命名空間? – 2009-10-22 13:47:58

回答

2

您可以讓一個enum使用另一個值,但不能使它們互換(不投射)。

public class MyManager 
{ 
    public enum Types 
    { 
     Type1 = com.abcd.data.MyObject.Types.Type1, 
     Type2 = com.abcd.data.MyObject.Types.Type2, 
     Type3 = com.abcd.data.MyObject.Types.Type3 
    } 
} 

這將讓你在兩個enum S之間澆鑄,並得到了相同部件名稱相同的值,但你仍然要投。

0

我不明白爲什麼移動枚舉會破壞任何東西。您應該能夠將枚舉移動到com.abcd.Types,並確保MyObject代碼文件包含com.abcd命名空間的using指令。如果你真的想要在MyManager之內有枚舉,那麼MyObject必須參考MyManager.Types而不是僅僅Types

當您嘗試重構時,是否遇到任何特定問題?

0

我有兩個建議。

1)將MyObject.Types枚舉移動到MyObject和MyManager有引用的單獨項目。

2)在MyManager項目中創建一個與MyObject項目中的枚舉匹配的枚舉。然後你就可以有某種映射方法:

public void Init(string name, MyManager.Types type) 
{ 
    MyObject.Types t = type.ToMyObjectType(); 
} 

internal static class Extensions 
{ 
    public static MyObject.Types ToMyObjectType(this MyManager.Types t) 
    { 
     //do mapping 
    } 
} 

使用第二種方法,因爲如果在MyObject來枚舉不斷變化,你需要記住,以及更新此代碼,我不會建議。