我有两个课程如下
public class ClassX
{
int id,
string title,
string description
}
public class ClassY
{
int id,
string title,
string description,
int localeId,
int clientId
}
我有两个来自这些类的列表,如下所示
IList<ClassX> listX = new List<ClassX>();
IList<ClassY> listY = new List<ClassY>();
我需要将listY列表转换为listX列表
在这种情况下请注意ClassY的属性即
int localeId,
int clientId
不会填充值
我可以从listY到listX Lists隐藏
答案 0 :(得分:7)
当然可以:
listX = listY.Select(y => new ClassX()
{
description = y.description,
id = y.id,
title = y.title
}).ToList();
这会从ClassX
和ClassY
中选择所有常见属性,并为每个ClassX
初始化ClassY
个实例。然后,它会调用ToList
来创建新的List<ClassX>
。
请注意,您需要添加using System.Linq
。
编辑:我必须同意@AdrianFaciu您应该考虑重构您的课程。当您需要将两个相似的类相互转换时,听起来好像您最好使ClassX
成为ClassY
的基类。
public class ClassX
{
public int id { get; set; }
public string title { get; set; }
public string description { get; set; }
}
public class ClassY : ClassX
{
public int localeId { get; set; }
public int clientId { get; set; }
}
现在ClassY
隐含地具有ClassX
的所有属性。
答案 1 :(得分:2)
var result = listY.Select(y => new ClassX {
id = y.id,
title = y.title,
description = y.description });
答案 2 :(得分:2)
您可以使用以下代码获取ClassX
对象的列表。
var list = (from t in listY
select new ClassX
{
id = t.id,
title = t.title,
description = t.description
}).ToList();
但是你可以将ClassY
作为ClassX
的子类,并使用继承
具有以下类结构:
public class ClassX
{
public int id { get; set; }
public string title { get; set; }
public string description { get; set; }
}
public class ClassY : ClassX
{
public int localeId { get; set; }
public int clientId { get; set; }
}
稍后你可以这样做:
List<ClassY> listY = new List<ClassY>();
listY.Add(new ClassY { id = 0, title = "sometitle1", description = "some description", localeId = 1, clientId = 2 });
listY.Add(new ClassY { id = 1, title = "sometitle2", description = "some description", localeId = 1, clientId = 2 });
listY.Add(new ClassY { id = 2, title = "sometitle3", description = "some description", localeId = 1, clientId = 2 });
List<ClassX> listX = (from t in listY
select (ClassX)t).ToList(); //casting to base class
您将ClassY
的项目投射到基类ClassX
答案 3 :(得分:1)
尝试以下
var listX = listY.Select(y => new ClassX { id = y.id, title = y.title, description = y.description).ToList();
答案 4 :(得分:1)
如果你不想改变你的对象(例如通过Adrian实现基类的想法),那么就做直截了当的方式:
var listYtoX = listY.Select(y => new ClassX()
{
id = y.id,
title = y.title,
description = y.description
}).ToList();
答案 5 :(得分:0)
伪代码:
listY.Select(y=>new ClassX(){ id = ..., title = ..., description = ...}).ToList();