2014-06-27 63 views
0

我有兩個引用相同的預編譯(C#)DLL的項目。 該.dll在其名稱空間中包含公共枚舉,但是: 這兩個項目都必須在此枚舉中使用不同的值。C#在運行時切換枚舉

是否有可能定義類似的東西? (僞代碼)

namespace module 
{ 

    #if ConfigurationManager.AppSettings["project"] == "Extern" 

    public enum Roles 
    { 
     Admin = 0, 
     User = 1, 
     Vip = 2 
    } 

    #else /* "Intern" */ 

    public enum Roles 
    { 
     Admin = 0, 
     Staff = 1, 
     User = 2 
    } 

    #end 
} 

重要說明:此代碼必須進行預編譯,因此預處理器指令是不可能的。

+1

正如一句忠告,所有'枚舉'本質上是靜態的,所以沒有必要像這樣重新聲明它們。http://stackoverflow.com/questions/4567868/troubles-declaring-static-enum-c-sharp – krillgar

+2

似乎真的有誤導性,我不知道,即使我想知道它是否可能.. –

+1

我不認爲'公共靜態枚舉'中的'靜態'是爲你做任何事情或不會工作 - [麻煩declar靜態枚舉,C#](http://stackoverflow.com/questions/4567868/troubles-declaring-static-enum-c-sharp) – crashmstr

回答

1

這將有可能混淆的人,但如果你真的想在這個方向的東西,有一個光線調整,怎麼樣:

public enum Roles 
    { 
     Admin = 0, 
     Staff = 1, 
     User = 1, 
     Vip = 2, 
     UserInternal = 2, 
    } 

注意,我不得不重新命名您的名字之一。

您可以比較整數值,甚至用將是真正的名字(Roles.Staff == Roles.Usertrue

但是,像在評論中我不會強烈推薦它。

1

你可以有,但他們都不能在同一個命名空間。你可能有一個是module.Extern.Roles,另一個是module.Intern.Roles,但是如果你想讓它們在同一個命名空間中,你必須將這些值合併成一個枚舉或者改變其中一個枚舉的名字。