-1

我的目标是在列表和枚举之间进行一些混合。

我创建列表时的示例:

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

==>但是不可能像这样调用“test1”:toto.test1

使用枚举可能是这样的:

public enum toto{
test,test2
}

但不可能根据字符串创建动态枚举

我的问题的想法?

感谢您的帮助

4

3 回答 3

6

我不确定您要做什么。如果要动态扩展对象,则:

为什么不在ExpandoObject.NET 4.0 中尝试?

dynamic toto = new ExpandoObject();
toto.test1 = 10;
toto.test2 = 300;
toto.test3 = "Hello";
于 2013-03-21T15:09:49.277 回答
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);

于 2013-03-21T15:10:17.543 回答
0

如果您只想在一个方法中使用这样的对象(而不将其传递给其他任何地方),您可以使用匿名类型(从 3.0 开始):

var container = new 
                  {
                       test1,
                       test2,
                  };

var test1Again = container.test1;

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

于 2013-03-21T15:27:58.613 回答