我有两个类- Record
和RecordModified
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>
。必须使用位于不同类中的RecordTypeID
s将Record
类的enum
属性转换为RecordModified
的属性RecordTypeText
。
关于我如何进行转换的代码片段:
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.
}
这个解决方案很好,但问题是很多代码,我不认为它是有效的。一定有更好的方法。请建议一下。
发布于 2015-03-01 23:55:45
我认为您可以同时使用ConvertAll方法
List<Record> t = new List<Record>();
var result = t.ConvertAll(x => new RecordModified()
{
RecordTypeText = ((MyEnum)x.RecordTypeID).ToString()
});
发布于 2015-03-01 23:51:28
如果您唯一的问题是将enum
的索引转换为它的文本,则可以使用GetNames
并使用索引来获取所使用的enum
值的名称。
string text = Enum.GetNames(typeof(MyEnum))[r.RecordTypeID];
这样,您就不需要switch
语句,并且只能恢复到一行。
发布于 2015-03-01 23:52:32
您只需使用您可以使用的(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()
});
Select
是一个LINQ extension
方法,工作在所有IEnumerable<>
对象上,而ConvertAll
仅由List<>
实现。ConvertAll
方法从.NET 2.0开始就存在,而LINQ
是在3.5中引入的。
您应该更喜欢Select
而不是ConvertAll
,因为它适用于任何类型的列表,但它们基本上是一样的。
https://stackoverflow.com/questions/28804783
复制相似问题