Genieric 将字符串列表转换为枚举列表

本文关键字:列表 枚举 转换 Genieric 字符串 | 更新日期: 2023-09-27 18:31:59

是否可以制作一个通用方法,我不知道我拥有哪种类型的枚举并将字符串解析为此类型?

例:

我想从某个带有字符串列表的模型到带有枚举列表的模型制作映射器

型号 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。

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

Genieric 将字符串列表转换为枚举列表

您可以像下面这样更改您的课程。

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
    }

然后你回复!

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

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

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

  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>()