2015-03-02 120 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

相關問題