通用转换字符串列表到枚举列表

时间:2014-11-26 11:48:27

标签: c# .net enums

是否有可能制作一个通用的方法,我不知道我有什么类型的枚举并解析字符串到这种类型?

示例:

我想从一些模型制作映射器,其中包含字符串列表以及枚举列表

模型1

public class Model1 {
    public List<string> SomeList1 {get; set;}
    public List<string> SomeList2 {get; set;}
}

模型2

public class Model2{
   public List<MyEnum1> SomeList1 {get; set;}
   public List<MyEnum2> SomeList2 {get; set;}
}

现在我想在一个通用方法中将Model1.SomeList1解析为Model2.SomeList1,将Model1.SomeList2解析为Model2.SomeList2。

有可能吗?如果是的话,我怎么能做到?

3 个答案:

答案 0 :(得分:0)

您可以更改以下类别。

class Program
{
    static void Main(string[] args)
    {
        Model m = new Model();
        m.SomeList1=new List<baseModel>();
        var _string = m.SomeList1.First<baseModel>().sVal;
        var _enum = m.SomeList1.First<baseModel>().eMyEnum;
    }
}


class baseModel {
    public string sVal;
    public myEnum eMyEnum;
    public string sVal2;
    public myEnum eMyEnum;
}

class Model
{
    public List<baseModel> SomeList1 { get; set; }

}

        enum myEnum{
        someVal=1,
        someVal2=2
    }

答案 1 :(得分:0)

Thenk你的回复!

在更广泛的上下文中,我有数据库,我有一个模型用于此数据库中的表,一个模型用于数据库用于我的网页(web有自己的数据库,模型有其他数据)。现在我不会映射这两个模型的值。

网页中的用户有drobdown(枚举),db是字符串。我有一些类似的情况。

答案 2 :(得分:0)

我认为这将满足您的需求:

  public static List<T> ConvertToEnumList<T>(this List<string> statusList) where T : struct, IConvertible
    {
        var list = new List<T>();
        statusList.ForEach(status =>
        {
            if (Enum.TryParse<T>(status, out var e))
            {
                list.Add(e);
            }
        });
        return list;
    }

这确实会过滤掉所有不可解析的枚举,如果需要的话,您可能想抛出一个错误。

您可以像这样使用:

new List<string>{"string1", "string2"}.ConvertToEnumList<EnumType>()