Список или Коллекция подходят в этом случае.
С точки зрения исходного вопроса, вы можете поместить список в коллекцию очень просто:
List<Foo> list = new List<Foo>();
// ...
Collection<Foo> col = new Collection<Foo>(list);
Это настоящая обертка; добавить элемент в обертку (col), и он будет добавлен в список. Это может немного сбивать с толку, потому что многие такие конструкторы используют аргумент для начальной загрузки, но не ссылаются на исходный список. Коллекция является исключением; -p
Поскольку вы находитесь на границе веб-службы, эта рекомендация FxCop не применяется. Это полезно (в соответствии с недавним блогом Эрика Липперта ), чтобы предотвратить расторжение памяти вызывающим абонентом над памятью вызываемого абонента, но в сценарии с распределенными веб-сервисами, который просто не применяется. Фактически, поскольку у веб-сервисов есть несколько хорошо задокументированных проблем с определенными типичными сценариями, простой массив, вероятно, очень удобен и прагматичен на границе веб-сервиса. В контексте блога Эрика - в данном случае не возникает вопроса о проблеме звонящего / вызываемого абонента, поскольку между ними существует принудительный барьер.
С точки зрения WSDL / mex, я подозреваю, что все 3 (список / коллекция / массив) просто станут блоком элементов - так что вы можете хорошо использовать тот, который удобнее.