0

我有两个课程如下

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 列表吗

4

6 回答 6

7

是的当然:

listX = listY.Select(y => new ClassX()
{
    description = y.description,
    id = y.id,
    title = y.title
}).ToList();

ClassX这会从和中选择所有公共属性,ClassYClassX为每个ClassY. 然后它调用ToListwhich 创建一个新的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

于 2012-09-17T07:15:49.050 回答
2
 var result = listY.Select(y => new ClassX { 
                            id = y.id, 
                            title = y.title, 
                            description = y.description });
于 2012-09-17T07:16:08.847 回答
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

于 2012-09-17T07:16:14.320 回答
1

试试下面的

var listX = listY.Select(y => new ClassX { id = y.id, title = y.title, description = y.description).ToList();
于 2012-09-17T07:16:13.023 回答
1

如果你不想改变你的对象(例如通过实现 Adrian 的基类思想),那么直接做:

var listYtoX = listY.Select(y => new ClassX()
                                 {
                                     id = y.id,
                                     title = y.title,
                                     description = y.description
                                 }).ToList();
于 2012-09-17T07:16:33.610 回答
0

伪代码:

listY.Select(y=>new ClassX(){ id = ..., title = ..., description = ...}).ToList();
于 2012-09-17T07:17:20.307 回答