明天的明天 永远的永远 未知的一切 我与你一起承担 ??

是非成败转头空 青山依旧在 几度夕阳红 。。。
随笔 - 1277, 文章 - 0, 评论 - 214, 阅读 - 321万
  博客园  :: 首页  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

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

Posted on   且行且思  阅读(10920)  评论(0编辑  收藏  举报
复制代码
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();
                } 
复制代码

编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2008-01-07 学习笔记:UpdateProgress
2008-01-07 Asp.Net :写入 、读取 、 删除、追加cookie数组?
2008-01-07 揭开ASP.NET中Cookie编程的奥秘
点击右上角即可分享
微信分享提示