Список массивов, не зная типа до времени выполнения - PullRequest
0 голосов
/ 04 мая 2011

У меня есть следующий сценарий:

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

Форт в этом примере позволяет вызыватьих:

ObjType1
ObjType2
ObjType3

Затем мне нужно пройтись по списку массивов и получить доступ к нескольким свойствам каждого объекта (все три типа объектов содержат одинаковые имена двух свойств), а затем установить эти значения в свойствах одного из трехдругие типы объектов.Наконец, новые объекты должны быть добавлены в массив List.

ObjType4
ObjType5
ObjType6

Поскольку я не знаю, какой тип объекта заранее содержит список массивов, я предполагаю, что мне нужно использовать отражение, чтобы получить свойства объектов.Когда у меня есть свойства, я могу добавить их в универсальный класс, который содержит те же два свойства, что и ObjType 4,5 и 6, а затем привести объект универсального класса к нужному типу объекта, переданному в процедуру-функцию / функцию, а затем добавить его.к списку массивов.

Какой, по вашему мнению, лучший способ добиться этого?

Спасибо всем. Время

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

Ответы [ 3 ]

4 голосов
/ 04 мая 2011

Вы должны заставить все три типа реализовать интерфейс с этими свойствами.
Затем вы можете использовать List<YourInterface>.

1 голос
/ 04 мая 2011

Используйте интерфейс, поместите в него два свойства и примените его к каждому из ваших трех классов.Вот для чего они там.

0 голосов
/ 04 мая 2011

Если по какой-то причине вы не можете изменить классы, вы можете проверить тип каждого элемента во время цикла:

string prop1 = "";
string prop2 = "";
foreach (object item in myArray)
{
   if (item is ObjType1)
   {
      prop1 = (item as ObjType1).FirstProp;
      prop2 = (item as ObjType1).SecondProp;
   }
   else if (item is ObjType2)
   {
      prop1 = (item as ObjType2).FirstProp;
      prop2 = (item as ObjType2).SecondProp;
   }
   else if (item is ObjType3)
   {
      (item as ObjType3).FirstProp = prop1;
      (item as ObjType3).SecondProp = prop2;
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...