2009-03-04 9 views
1

У меня есть 2 отдельные классы:Какую универсальную коллекцию использовать?

  • AreaProperties
  • FieldProperties

1 AreaProperties может отображающие до 1 FieldProperties. Не меняя дизайн, я хочу, чтобы метод возвращал List<> этих объектов

Какая общая коллекция на C# была бы подходящей?

Я понимаю, я могу отправить 2 Lists и функция будет выглядеть следующим образом:

public List<AreaProperties> Save(ref List<FieldProperties>) 
{ 
    ..code 
} 

EDIT: решение Дрор Helper звучит хорошо. Однако недавно я узнал, что между FieldProperties и AreaProperties нет 1: 1. Как бы я теперь справился с этим. Я все еще хочу пойти с пользовательским классом, который имеет объект FieldProperties и AreaProperties, но как я могу обрабатывать сценарий от 1 до многих?

+0

Я не понимаю, что вы пытаетесь спросить. Можете ли вы прояснить вопрос? –

+0

Не совсем понятно, что вы просите, но вы почти наверняка не хотите передавать свой список по ссылке. См. Http://pobox.com/~skeet/csharp/parameters.html –

+0

Пожалуйста, объясните вопрос с помощью Code outline/class struicture, который поможет. – NileshChauhan

ответ

9

Вы можете создать класс/структуру, которая имеет два элемента - AreaProperties & FieldProperties и возвращает список этого класса

class Pair<T1, T2> 
{ 
    T1 t1; 
    T2 t2; 
} 

List<Pair<AreaProperties, FieldProperties>> Save(){ ...} 

Или использовать System.Collections.Generic.KeyValuePair вместо (за Патриком предложение ниже)

List<KeyValuePair<AreaProperties, FieldProperties>> Save(){ ... } 

Таким образом, вы также сохраняете отношение 1..1.

Edit: В случае вам нужно 1..n отношения, я думаю, вы хотите вернуться список >> вместо таким образом у вас есть список свойств поля для каждого AreaProperties вы получаете назад, и вы по-прежнему держать связь между ними.

+0

Не должно быть списка Сохранить()? –

+1

Существует уже общая структура в .NET, System.Collections.Generic.KeyValuePair (Of TKey, TValue) –

+0

@Thomas Eyde Это должно быть пара <...> - спасибо за головы –

0

Вы можете использовать общий Dictionary<FieldProperties, AreaPropeties>? Вам нужно будет написать свой собственный Comparer<FieldPropeties> и KeyValuePair<FieldProperties, AreaProperties>.

+0

В обратном порядке. – mbillard

+0

Ум, почему? Он хочет отобразить AreaProperties на основе FieldProperties.мне кажется, что FieldProperties должен быть ключом, нет? –

3

Вы могли бы возвращать List<KeyValuePair<AreaProperties, FieldProperties>>

+0

Ты избил меня! –

0

Если 1: 1 отношения должно быть приведено в исполнение, я рекомендую метод STRUCT Dror mentioned. Если отношение 1: 1 не применяется, я бы подумал об использовании модификатора параметра out.

void foo() 
{ 
    List<AreaProperties> listArea; 
    List<FieldProperties> listField; 
} 

void Bar(out List<AreaProperties> listArea, out List<FieldProperties> listField) 
{ 
    listArea = new List<AreaProperties>(); 
    listField = new List<FieldProperties>(); 

} 
Смежные вопросы