2014-09-16 4 views
-2

Мне нужно изменить тип объекта на основе оператора switch. Логика я хотел бы произойти будет выглядеть следующим образом:Установить var на основе переключателя

var orig; 

    switch(ID) 
    { 
     case 1: 
      orig = (List<ReportOne>)Session["Report"]; 
      break; 

     case 2: 
      orig = (List<ReportTwo>)Session["Report"]; 
      break; 
    } 


    var sort = from o in orig 
       where o.ID == ReportID 
       select o; 

Session["SortedReport"] = sort.ToList(); 

Но когда я пытаюсь это я получаю неявно типа локальная переменная должна быть инициализирована. Есть ли способ, которым я могу получить ту же функциональность, что и вышеупомянутая логика.

+2

Каков тип возврата вашего метода? –

+0

Изменить 'var orig;' to 'object orig = null;' и он должен работать. – TechneWare

+0

метод ничего не возвращает, но мне нужно установить переменную сеанса в правильный список после запуска его через оператор linq – Ironsides24

ответ

0

Если добавить родительский интерфейс для отчетов:

IEnumerable<IReport> orig = Session["Report"] as IEnumerable<IReport>; 
if (orig != null) 
{ 
    var sort = from o in orig 
      where o.ID == ReportID 
      select o; 

    Session["SortedReport"] = sort.ToList(); 
} 
+0

@Cameron, спасибо за редактирование –

+0

Cameron, теперь у этого есть оригинальная неинициализированная проблема если идентификатор не равен 1 или 2. – Almo

+0

@Almo, он даже не компилируется, спасибо –

3

Вы не можете использовать Var для этого. Компилятор должен знать, какой тип объекта Var.

Что вы можете использовать, это интерфейс или базовый класс.

Если вы назначаете интерфейс для обоих классов, или же базового класса, вы можете заменить

var orig 

с

IEnumerable<baseClass> orig 

Или

IEnumerable<iClass> orig 

Если вам нужна функциональность List вы можете преобразовать IEnumerable.ToList() для достижения этой функциональности.

+0

Это правильный ответ ... «Объект», являющийся базовым классом последней инстанции ... –

+5

«Список» не является ковариантным; это не законно использовать его в этой усадьбе. – Servy

+0

@Servy Вы правы. Я обновил код, чтобы отразить это. –

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