2015-03-02 87 views
1

我有两个类 - 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>Record类的RecordTypeID财产必须转换为RecordModified的财产RecordTypeText使用enum s在不同的类。关于如何我想转换

代码片段:

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. 
    } 

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

+1

@Patrick福满沿...感谢您的编辑 – dividedbyzero 2015-03-02 07:58:48

回答

3

我认为你可以使用ConvertAll方法与此

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

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

解决方案很好,谢谢。你可以请建议一个很好的教程来了解lambda表达式。 – dividedbyzero 2015-03-02 08:18:38

2

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

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

这样,你不需要switch语句,可以恢复到只有一条线。

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 

     } 
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作为,

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

SelectLINQ extension方法,而ConvertAllList<>只执行对所有IEnumerable<>对象的作品。从.NET 2.0开始存在ConvertAll方法,而在3.0中引入了LINQ

您应该倾向于使用Select而不是ConvertAll,因为它适用于任何类型的列表,但它们基本上也是这样。

+0

的解决方案工作很好,谢谢。你可以请建议一个很好的教程来了解lambda表达式。 – dividedbyzero 2015-03-02 08:19:30

+1

@dividedbyzero:[C#编程指南](https://msdn.microsoft.com/en-us/library/bb397687.aspx)怎么样? – 2015-03-02 08:20:41

+0

@patrick郝夫曼....谢谢你sir – dividedbyzero 2015-03-02 08:22:05

相关问题