Какую универсальную коллекцию использовать? - PullRequest
1 голос
/ 04 марта 2009

У меня есть 2 отдельных класса:

  • AreaProperties
  • FieldProperties

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

Какая универсальная коллекция в C # подойдет?

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

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

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

Ответы [ 4 ]

9 голосов
/ 04 марта 2009

Вы можете создать класс / структуру, которая имеет два члена - 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 отношения, я думаю, что вы хотите вернуться Список >> вместо этого, таким образом, у вас есть список свойств поля для каждого возвращаемого свойства области, и вы все еще сохраняете связь между ними.

3 голосов
/ 04 марта 2009

Вы можете вернуть List<KeyValuePair<AreaProperties, FieldProperties>>

0 голосов
/ 04 марта 2009

Если необходимо обеспечить соотношение 1: 1, я рекомендую метод struct Dror упомянутый Если соотношение 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>();

}
0 голосов
/ 04 марта 2009

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

...