Допустим, есть разные контракты C1, C2, C3, .... Cn.

Теперь у меня есть метод, который выглядит следующим образом:

public List<Cn> M(string param1, string param2)
{
   switch(param2)
     case value1:
          var list1 = new List<C1>();
          list.Add(new C1());
          return list;
          break;
     case value2:
          var list2 = new List<C2>();
          list.Add(new C2());
          return list2;
          break;
     default:
          return null;
          break;
}

Этот метод вызывает метод БД, который выбирает данные на основе параметра param2 и создает список конкретных объектов и возвращает то же самое. Теперь для разных значений param2 он будет отправлять список объектов разного типа. Как этого добиться? При общем или каком-либо другом подходе будет оценена любая помощь.

Обновить:

C1 и C2 могут быть разными по структуре.

Class C1
{
   int i;
   string j;
}
Class C2
{
   string i;
   string j;
}
0
Arijit Saha 7 Сен 2016 в 07:35

4 ответа

Лучший ответ

Что общего между вашими контрактами? сделайте его интерфейсом и позвольте всем классам контрактов реализовать этот интерфейс.

Подпись вашего метода будет выглядеть примерно так

public IEnuemerable<ICommonInterface> M(string param1 ,string param2)
{

}
0
Yogi 7 Сен 2016 в 04:43

Для создания экземпляров нужного типа необходимо использовать system.activator.

Вот ссылка на ответ на ваш вопрос. Получить новый экземпляр объекта из типа

0
Community 23 Май 2017 в 11:51

Я предлагаю вам использовать интерфейс маркеров.

public interface IContract{}

public class C1: IContract{
  ...
}
public class C2: IContract{
  ...
}

public List<IContract> M(string param1, string param2){
 ...
}
0
shole 7 Сен 2016 в 04:47

Вместо этого вы можете попробовать изменить возвращенный список на список объектов

public List<object> M(string param1, string param2){
    //code here
}
0
jmaghuyop 7 Сен 2016 в 04:38