2013-03-21 92 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; 

否则,您唯一能做的就是动态对象,因为编译器将无法验证此类用法。