2015-11-19 6 views
0

Я хотел бы объявить глобальную переменную за пределами оператора switch, где результирующие записи могут быть из двух разных таблиц. Как я могу это достичь?Объявление глобальной переменной за пределами оператора switch

var q; 

Switch(petType) 
{ 
case 1: 
    var q = from c in Cats 
       where c.Type equals == 1 
       select c; 
    break; 
case 2: 
    var q = from d in Dogs 
       where d.Type equals == 1 
       select d; 
    break; 
} 

foreach(var r in q) 
{ 
    //Do Stuff 
} 
+2

Вы изучали полиморфизм? – johnnyRose

+0

«Кошки» и «Собаки» - это два совершенно разных типа. Они не могут быть сохранены в одной и той же переменной. C# - статически типизированный язык. – David

+1

'Animal' - проблема решена. –

ответ

0

У вас есть «var q», определенный в 3-х местах. Требуется только в одном месте. Используйте объект вместо var, как показано ниже

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      List<Dog> Dogs = new List<Dog>(); 
      List<Cat> Cats = new List<Cat>(); 
      object q; 
      int petType = 1; 


      switch(petType) 
      { 
      case 1: 
       q = from c in Cats 
          where c.Type == 1 
          select c; 
       break; 
      case 2: 
       q = from d in Dogs 
          where d.Type == 1 
          select d; 
       break; 
      } 

     } 
    } 

    public class Cat 
    { 
     public int Type { get; set; } 
    } 
    public class Dog 
    { 
     public int Type { get; set; } 
    } 

} 
​ 
0

Чтобы уточнить, что такое @ B.K. предположил, в случае, если ОП все еще не ясно.

public abstract class Animal { 
    public int NoOfLegs { get; set; } // example 
} 

public class Cat : Animal { 
} 

public class Dog : Animal { 
} 

List<Animal> q; 

Switch(petType) 
{ 
    case 1: 
    q = from c in Cats 
     where c.Type equals == 1 
     select c; 
    break; 

    case 2: 
    q = from d in Dogs 
     where d.Type equals == 1 
     select d; 
    break; 
} 

foreach(var r in q) 
{ 
    //Do Stuff 
} 
+0

Был ли кто-нибудь из ответов или комментариев решает ваш вопрос? Если да, то не оставляйте вопрос открытым. Закройте, пометив ответ (в зависимости от того, что это). Если это комментарий, вы можете попросить комментатора преобразовать это в ответ. Это поможет читателям в будущем, если у них возникнет аналогичная проблема. – niksofteng