Составьте список списков, где список содержит объекты разных типов - PullRequest
1 голос
/ 28 августа 2009

В ASP.NET 3.5 / Silverlight у меня возникает ситуация, когда мне нужно отправить четыре небольших списка с сервера на клиент. Каждый подсписок представляет собой список объектов. Я хотел бы сделать это с помощью одного звонка от клиента.

Так, например:

ListA - список объектов POHeader ListB - это список объектов POLine ListC - это список объектов Vendor ListD - это список объектов Project

ListX будет списком, содержащим каждый из четырех списков.

Каждый из этих объектов имеет разную структуру. Когда список вернется к клиенту, я разберу его и свяжу каждый из четырех подсписков с соответствующим элементом управления.

Возможно ли это в C #. Я видел примеры списков списков, но каждый из списков был одного типа.

Большое спасибо Майк Томас

Ответы [ 3 ]

4 голосов
/ 28 августа 2009

Поскольку у вас всегда есть 4 списка, просто создайте пользовательский класс для их хранения и передайте его обратно:

class POCollection
{
     IList<POHeader> Headers { get; private set; }
     IList<POLine> Lines { get; private set; }
     // etc...
}
0 голосов
/ 28 августа 2009

Вы также можете хранить их в отдельных списках, возвращаемых к объектам ... и затем преобразовывать их в место назначения.

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();
...
0 голосов
/ 28 августа 2009

Вы можете отправить их обратно в виде списка объектов, а затем использовать оператор запроса OfType для восстановления списков на клиенте:

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

Хотя я бы сделал DTO с каждым списком в качестве члена, что более полезно для любых абонентов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...