C# 从列表的on类型转换为其他类型
我有两门课-C# 从列表的on类型转换为其他类型,c#,list,typeconverter,C#,List,Typeconverter,我有两门课-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
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
类的RecordTypeID
属性必须使用不同类中的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.
}
foreach(在列表中记录r)
{
开关(r.RecordTypeID)
{
案例(int)MyEnum.One:
listofRecordModified.Add(new RecordModified{RecordTypeID=r.RecordTypeID,…,**RecordTypeText=(MyEnum.One).ToString()})**//注意这一点
打破
另外还有75起案件。
}
这个解决方案很好,但问题是代码太多,我认为它效率不高。一定有更好的方法。请建议。如果您唯一的问题是将
enum
的索引转换为文本,您可以使用GetNames
并使用的索引来获取enum
使用的值
string text = Enum.GetNames(typeof(MyEnum))[r.RecordTypeID];
这样,您就不需要使用
switch
语句,并且可以只还原到一行。如果您唯一的问题是将枚举的索引转换为其文本,则可以使用GetNames
并使用的索引来获取所使用的枚举值的名称
string text = Enum.GetNames(typeof(MyEnum))[r.RecordTypeID];
这样,您就不需要switch
语句,而且您可以只还原到一行。我相信每个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
}
foreach(在列表中记录r)
{
MyEnum MyEnum=(MyEnum)r.RecordTypeID;
string stringValue=myEnum.ToString();
添加(newrecordmodified{RecordTypeID=r.RecordTypeID,…**RecordTypeText=stringValue})**//注意这一点
}
我相信每个MyEnum值都有每个开关语句?
这是很多重复的代码,没错
为什么不直接将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
}
foreach(在列表中记录r)
{
MyEnum MyEnum=(MyEnum)r.RecordTypeID;
string stringValue=myEnum.ToString();
添加(newrecordmodified{RecordTypeID=r.RecordTypeID,…**RecordTypeText=stringValue})**//注意这一点
}
您可以使用您可以使用(MyEnum)x.RecordTypeID
将整数值转换为匹配的枚举值。然后使用该.ToString()
获取字符串值。Linq Lambda表达式
,如下所示
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扩展
方法,适用于所有IEnumerable
对象,而ConvertAll
仅由List
实现。ConvertAll
方法自.NET 2.0以来就存在,而LINQ
是在3.5中引入的
你应该喜欢选择而不是ConvertAll
,因为它适用于任何类型的列表,但它们基本上都是一样的。你可以使用(MyEnum)x.RecordTypeID
将整数值转换为匹配的枚举值。然后使用.ToString()
获取字符串值。Linq Lambda表达式
如下所示
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扩展
方法,适用于所有IEnumerable
对象,而ConvertAll
仅由List
实现。ConvertAll
方法自.NET 2.0以来就存在,而LINQ
是在3.5中引入的
您应该更喜欢Select
而不是ConvertAll
,因为它适用于任何类型的列表,但它们的作用基本相同。我认为您可以使用ConvertAll方法
List<Record> t = new List<Record>();
var result = t.ConvertAll(x => new RecordModified()
{
RecordTypeText = ((MyEnum)x.RecordTypeID).ToString()
});
List t=newlist();
var result=t.ConvertAll(x=>newrecordmodified()
{
RecordTypeText=((MyEnum)x.RecordTypeID).ToString()
});
我认为您可以同时使用ConvertAll方法
List<Record> t = new List<Record>();
var result = t.ConvertAll(x => new RecordModified()
{
RecordTypeText = ((MyEnum)x.RecordTypeID).ToString()
});
List t=newlist();
var result=t.ConvertAll(x=>newrecordmodified()
{
RecordTypeText=((MyEnum)x.RecordTypeID).ToString()
});
@Patrick Hofman…谢谢你的邀请edit@PatrickHofman…谢谢你的编辑该解决方案非常有效,谢谢。你能推荐一个好的教程来理解lambda表达式吗?该解决方案非常有效,谢谢。你能推荐一个好的教程来理解lambda表达式吗?该解决方案非常有效,谢谢。你能推荐sugg吗这是理解lambda表达式的一个很好的教程。@dividedbyzero:那么呢?这个解决方案非常有效,谢谢。你能推荐一个理解lambda表达式的很好教程吗。@dividedbyzero:那么?