列出列表具有不同类型对象的列表

时间:2009-08-28 16:30:00

标签: c# silverlight

在ASP.NET 3.5 / Silverlight中,我遇到需要从服务器向客户端发送四个小列表的情况。每个子列表都是一个对象列表。我想通过客户的一个电话来做到这一点。

所以,例如:

ListA是POHeader对象的列表 ListB是POLine对象的列表 ListC是供应商对象的列表 ListD是项目对象列表

ListX将是一个包含四个列表中每个列表的列表。

这些对象中的每一个都具有不同的结构。当列表返回到客户端时,我将把它拆开并将四个子列表中的每一个绑定到相关控件。

这在C#中是否可行。我已经看过列表列表的示例,但每个子列表都是相同的类型。

非常感谢 迈克托马斯

3 个答案:

答案 0 :(得分:4)

由于您总是有4个列表,只需创建一个自定义类来保存它们,然后将其传回:

class POCollection
{
     IList<POHeader> Headers { get; private set; }
     IList<POLine> Lines { get; private set; }
     // etc...
}

答案 1 :(得分:0)

您可以将它们作为对象列表发回,然后使用OfType查询运算符重新构建客户端上的列表:

List<object> allItems;
var headers allItems.OfType<POHeader>().ToList();
var lines = allItems.OfType<POLine>().ToList();
...

虽然我会将每个列表作为成员制作一个DTO,这对任何来电者都有帮助。

答案 2 :(得分:0)

您还可以将它们保存在单独的列表中,这些列表会转换回对象...然后在目的地重新制作它们。

List<POHeader> ListA;
List<POLine> ListB;
List<Vendor> ListC;
List<Project> ListD;
...
List<List<object>> message = new List<List<object>>(){
ListA.Cast<object>().ToList(),
ListB.Cast<object>().ToList(),
ListC.Cast<object>().ToList(),
ListD.Cast<object>().ToList()
};

然后再回到检索......

List<POHeader> ListA = message[0].Cast<POHeader>().ToList();
...