C# List<> 泛型中遍历不同类型

List <Person> person = new List <Person>(); 
Person p1 
= new Person("张三"26, Gender.Male, "看书"); 
Person p2 
= new Person("张四"55, Gender.Male, "钓鱼"); 


List 
<Student> stu = new List <Student>(); 
Student s1 
= new Student("李四"26, Gender.Male, "电影""S2T11"); 
Student s2 
= new Student("李五"20, Gender.Male, "电脑""S2T11"); 


List 
<Teacher> tch = new List <Teacher>(); 
Teacher t1 
= new Teacher("王五"26, Gender.Male, "音乐""S1,S2,Y2"); 
Teacher t2 
= new Teacher("王六"30, Gender.Male, "音乐""S1,S2"); 

person.Add(p1); 
person.Add(p2); 
person.Add(s1); 
person.Add(s2); 
person.Add(t1); 
person.Add(t2); 
/////////////用for遍历出Student类型和Teacher类型//////////////////
for (int i = 0; i < person.Count; i++

if (person[i] is Student) 

((Student)person[i]).SayHi(); 

else if (person[i] is Teacher) 

((Teacher)person[i]).SayHi(); 




========================================
用foreach来遍历出Student类型和Teacher类型   替换上面for的遍历
========================================


基类 Person  子类 Student Teacher


static void Main(string[] args) 
        { 
          
            List 
<Person> person = new List <Person>(); 
            Person p1 
= new Person("张三"26, Gender.Male, "看书"); 
            Person p2 
= new Person("张四"55, Gender.Male, "钓鱼"); 


            Person s1 
= new Student("李四"26, Gender.Male, "电影""S2T11"); 
            Person s2 
= new Student("李五"20, Gender.Male, "电脑""S2T11"); 


            Person t1 
= new Teacher("王五"26, Gender.Male, "音乐""S1,S2,Y2"); 
            Person t2 
= new Teacher("王六"30, Gender.Male, "音乐""S1,S2"); 

            person.Add(p1); 
            person.Add(p2); 
            person.Add(s1); 
            person.Add(s2); 
            person.Add(t1); 
            person.Add(t2); 

            
//for (int i = 0; i < person.Count; i++) 
            
//
            
//    if (person[i] is Student) 
            
//    { 
            
//        ((Student)person[i]).SayHi(); 
            
//    } 
            
//    else if (person[i] is Teacher) 
            
//    { 
            
//        ((Teacher)person[i]).SayHi(); 
            
//    } 
            
//
            foreach (Person p in person) 
            { 
                
if (p is Student) 
                { 
                    p.SayHi(); 
                } 
                
else if (p is Teacher) 
                { 
                    p.SayHi(); 
                } 
            } 


          Console.ReadLine(); 
        }


或者:这样。。。。。。。。。。

 if (p is Student)
                {
                    p.SayHi();
                }
                
else if (p is Teacher)
                {
                    p.SayHi();
                } 

原文地址:https://www.cnblogs.com/Fooo/p/1370768.html