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:那么?