【问题标题】:Make a List of Lists where List Has Different Type Objects制作列表具有不同类型对象的列表
【发布时间】:2010-11-23 19:16:34
【问题描述】:

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

所以,例如:

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

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

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

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

非常感谢 迈克·托马斯

【问题讨论】:

    标签: c# silverlight


    【解决方案1】:

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

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

    【讨论】:

    • 任何时候你开始有列表列表的列表,你应该开始尝试看看你是否真的有一个可定义的对象。
    • DataDink - 你能详细说明一下吗?可以举个例子吗??迈克·托马斯
    【解决方案2】:

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

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

    虽然我会为每个列表作为成员创建一个 DTO,这对任何调用者都更有帮助。

    【讨论】:

      【解决方案3】:

      您也可以将它们保存在单独的列表中,然后将它们投射回对象......然后在目的地重新投射它们。

      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();
      ...
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多