我有两个课程 - 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
将Record
类的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.
}
这个解决方案运行正常,但问题是很多代码,我认为它没有效率。必须有一些更好的方法来做到这一点。请建议。
答案 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
}