从列表类型转换为另一种类型

时间:2015-03-02 07:43:26

标签: c# list typeconverter

我有两个课程 - RecordRecordModified

public  class Record
{
    public int RecordID { get; set; }
    public int FacilityID { get; set; }
    public int NewAID { get; set; }
    public string OldID { get; set; }
    public string Data { get; set; }
    public int SyncStatusID { get; set; }
    public int RecordTypeID { get; set; }//RecordTypeID is integer here.

}

第二课

public  class RecordModified
{
    public int RecordID { get; set; }
    public int FacilityID { get; set; }
    public int NewAID { get; set; }
    public string OldID { get; set; }
    public string Data { get; set; }
    public int SyncStatusID { get; set; }
    public string RecordTypeText { get; set; }//RecordTypeText is string here.
 }

我有一个包含至少100个Record个对象的记录列表,现在我必须将List<Record>转换为List<RecordModified>。必须使用不同类中的RecordTypeIDRecord类的RecordTypeText属性转换为RecordModified的属性enum

我尝试转换的代码段:

 foreach(Record r in List<Record>)
 {
   switch(r.RecordTypeID)
   {
     case (int)MyEnum.One:
     listofRecordModified.Add(new RecordModified{RecordTypeID=r.RecordTypeID,...,**RecordTypeText=(MyEnum.One).ToString()})** // Notice this
     break;
     ...........//75 more cases.
    }

这个解决方案运行正常,但问题是很多代码,我认为它没有效率。必须有一些更好的方法来做到这一点。请建议。

4 个答案:

答案 0 :(得分:3)

我认为你可以使用ConvertAll方法和

List<Record> t = new List<Record>();

            var result = t.ConvertAll(x => new RecordModified()
                {
                    RecordTypeText = ((MyEnum)x.RecordTypeID).ToString()
                });

答案 1 :(得分:2)

如果您唯一的问题是将enum的索引转换为其文本,则可以使用GetNames并使用其索引获取enum值的名称使用

string text = Enum.GetNames(typeof(MyEnum))[r.RecordTypeID];

这样,您就不需要switch语句,只能恢复为一行。

答案 2 :(得分:2)

您可以使用您可以使用(MyEnum)x.RecordTypeID将整数值强制转换为匹配的enum值。然后使用.ToString()获取字符串值。Linq Lambda expressions如下所示,

var result = RecordList.Select(x=>new RecordModified{
                              RecordTypeID=x.RecordTypeID,
                               ...,
                              RecordTypeText=((MyEnum)x.RecordTypeID).ToString()
                            });

您也可以使用ConvertAll as,

var result = RecordList.ConvertAll(x => new RecordModified()
                {
                    RecordTypeText = ((MyEnum)x.RecordTypeID).ToString()
                });

Select是一种LINQ extension方法,适用于所有IEnumerable<>个对象,而ConvertAll仅由List<>实现。自.NET 2.0起存在ConvertAll方法,而3.5引入LINQ

你应该支持Select而不是ConvertAll因为它适用于任何类型的列表,但它们基本上都是这样做的。

答案 3 :(得分:0)

我相信每个MyEnum值都有每个switch语句? 这是很多重复的代码,这是真的。

为什么不直接将int转换为文本值?

为了更具可读性,您可以这样做

 foreach(Record r in List<Record>)
      {
          MyEnum myEnum = (MyEnum)r.RecordTypeID;
         string stringValue = myEnum .ToString();
         listofRecordModified.Add(new   RecordModified{RecordTypeID=r.RecordTypeID, ...,**RecordTypeText=stringValue })** // Notice this

        }