2013-03-21 89 views
-1

我的目標是列表和枚舉之間的一個小混合。枚舉和列表之間的混合

例子,當我創建一個列表:

List<string> toto= new List<string>; 
toto.add("test1"); 
toto.add("test2"); 

==>但是這是不可能的,以所謂的「測試1」是這樣的:toto.test1

有了它可能是這樣的枚舉:

public enum toto{ 
test,test2 
} 

,但它不可能在串

的想法方面創建動態的枚舉對於我的問題?

感謝您的幫助

+5

你忘了'c#-5.0'標籤... – 2013-03-21 15:07:19

+2

「我的目標是在列表和枚舉之間有點混合。」那麼你的目標是什麼?你剛纔說明了你不能用listname.itemValue調用列表項,這就是全部... – 2013-03-21 15:08:28

+1

如果它本質上是動態的,那麼編譯器當然不能幫你用靜態類型。你試圖解決這個問題背後的問題是什麼? – Steven 2013-03-21 15:09:22

回答

6

我不知道你正在嘗試做的。如果您想要動態擴展對象,請執行以下操作:

爲什麼不在.NET 4.0中嘗試ExpandoObject

dynamic toto = new ExpandoObject(); 
toto.test1 = 10; 
toto.test2 = 300; 
toto.test3 = "Hello"; 
+0

但使用此方法,您必須在Object「ExpandObject」中創建變量test1&test2&test3。我想用一個詞「字符串」創建一個列表或其他人,並通過名稱訪問元素 – Zoners 2013-03-21 15:24:42

+0

@zoners你的問題沒有意義。您是否還有其他語言?如果可能,請將您的觀點告訴我們? – 2013-03-22 04:06:53

0

你可以做一個擴展功能,從你的列表中的字符串轉換爲枚舉成員。

public static MyEnum ToMyEnum(this String myEnumMemberAsString, Boolean ignoreCase = true) 
    { 
     if (String.IsNullOrEmpty(myEnumMemberAsString)) 
      throw new ArgumentException("ToMyEnum: String null or empty!"); 
     return (MyEnum)Enum.Parse(typeof(MyEnum), myEnumMemberAsString, ignoreCase); 
    } 

假設在你的問題的列表:

public static String GetFromList(this List<String> list, MyEnum elemToGet) 
{ 
    return list.SingleOrDefault(e => e == elemToGet.ToString()); 
} 

然後例如String found = list.GetFromList(MyEnum.test2);

+0

您可以用列表創建一個小例子嗎?我不明白你的方法如何工作 – Zoners 2013-03-21 15:46:34

+0

@Zoners認爲我誤解了。請參閱編輯。 – 2013-03-21 15:53:02

+0

這不能解決我的問題,對不起,因爲你的函數返回一個存在於枚舉中的字符串。但我想用你的名字來訪問listElement ... – Zoners 2013-03-21 16:26:21

0

如果你想只在一個方法使用這樣的對象執行(不及格它可以在任何地方)使用匿名類型(從3.0開始):

var container = new 
        { 
         test1, 
         test2, 
        }; 

var test1Again = container.test1; 

否則,您唯一能做的就是動態對象,因爲編譯器將無法驗證此類用法。