我的目标是在列表和枚举之间略微混合。
创建列表时的示例:
List<string> toto= new List<string>;
toto.add("test1");
toto.add("test2");
==&gt;但是无法像这样调用“test1”:toto.test1
有了枚举,这可能是这样的:
public enum toto{
test,test2
}
但是根据字符串
创建动态枚举是不可能的我的问题的想法?
感谢您的帮助
答案 0 :(得分:6)
我不确定你要做什么。如果您想动态扩展对象,那么:
为什么不在.NET 4.0中尝试ExpandoObject
?
dynamic toto = new ExpandoObject();
toto.test1 = 10;
toto.test2 = 300;
toto.test3 = "Hello";
答案 1 :(得分: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);
答案 2 :(得分:0)
如果你只想在一个方法中使用这样的对象(不在其他地方传递它),你可以使用匿名类型(从3.0开始):
var container = new
{
test1,
test2,
};
var test1Again = container.test1;
否则你唯一能做的就是动态对象,因为编译器无法验证这种用法。