在枚举和列表之间混合

时间:2013-03-21 15:06:09

标签: c#

我的目标是在列表和枚举之间略微混合。

创建列表时的示例:

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

==&gt;但是无法像这样调用“test1”:toto.test1

有了枚举,这可能是这样的:

public enum toto{
test,test2
}

但是根据字符串

创建动态枚举是不可能的

我的问题的想法?

感谢您的帮助

3 个答案:

答案 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;

否则你唯一能做的就是动态对象,因为编译器无法验证这种用法。