【问题标题】:Declaring a global variable outside a switch statement在 switch 语句之外声明一个全局变量
【发布时间】:2015-11-19 03:36:22
【问题描述】:

我想在 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
}

【问题讨论】:

  • 你研究过多态性吗?
  • CatsDogs 是两种完全不同的类型。它们不能存储在同一个变量中。 C# 是一种静态类型语言。
  • Animal - 问题解决了。

标签: c#


【解决方案1】:

您在 3 个地方定义了“var q”。只需要在一个地方。使用 object 而不是 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; }
    }

}
​

【讨论】:

    【解决方案2】:

    详细说明@B.K.建议,以防OP仍然不清楚。

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多