【问题标题】:Genieric convert List of string to list of enum通用将字符串列表转换为枚举列表
【发布时间】:2014-11-26 11:48:26
【问题描述】:

是否可以在我不知道我拥有什么类型的枚举并将字符串解析为这种类型的情况下创建一个通用方法?

例子:

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

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

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

【问题讨论】:

  • 也许你的意思是这样的? stackoverflow.com/questions/1044455/…
  • 不完全清楚你想要什么。你能告诉我们你到目前为止得到了什么吗?
  • 您可以为通用属性创建一个基类。从基类派生 Model1 和 Model2。这样就不需要转换/解析了。

标签: c# .net enums


【解决方案1】:

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

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
    }

【讨论】:

    【解决方案2】:

    感谢您的回复!

    在更广泛的背景下,我有数据库,我有一个模型到这个数据库中的表,一个模型到我的网页的数据库(网络有自己的数据库和带有其他数据的模型)。现在我不会映射这两个模型的值。

    网页中的用户有下拉列表(枚举),而 db 是字符串。我有几个类似的情况。

    【讨论】:

    【解决方案3】:

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

      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&lt;string&gt;{"string1", "string2"}.ConvertToEnumList&lt;EnumType&gt;()

    【讨论】:

      猜你喜欢
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 2013-06-11
      相关资源
      最近更新 更多