我的目标是在列表和枚举之间进行一些混合。
我创建列表时的示例:
List<string> toto= new List<string>;
toto.add("test1");
toto.add("test2");
==>但是不可能像这样调用“test1”:toto.test1
使用枚举可能是这样的:
public enum toto{
test,test2
}
但不可能根据字符串创建动态枚举
我的问题的想法?
感谢您的帮助
我的目标是在列表和枚举之间进行一些混合。
我创建列表时的示例:
List<string> toto= new List<string>;
toto.add("test1");
toto.add("test2");
==>但是不可能像这样调用“test1”:toto.test1
使用枚举可能是这样的:
public enum toto{
test,test2
}
但不可能根据字符串创建动态枚举
我的问题的想法?
感谢您的帮助
我不确定您要做什么。如果要动态扩展对象,则:
为什么不在ExpandoObject
.NET 4.0 中尝试?
dynamic toto = new ExpandoObject();
toto.test1 = 10;
toto.test2 = 300;
toto.test3 = "Hello";
您可以制作一个扩展功能,将字符串从您的列表转换为枚举成员。
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);
如果您只想在一个方法中使用这样的对象(而不将其传递给其他任何地方),您可以使用匿名类型(从 3.0 开始):
var container = new
{
test1,
test2,
};
var test1Again = container.test1;
否则,您唯一能做的就是动态对象,因为编译器将无法验证此类用法。