C# 使用泛型协变将派生类类型替换为基类类型

原代码:

cs 复制代码
 var result = queryAllMethod.Invoke(service, null); 

var list = (List<DefineBase>)result; 

DefineInfoList.AddRange(list); 

第二行代码报错,

System.InvalidCastException:"无法将类型为"System.Collections.Generic.List`1FluentVision.Core.AnalogIoDefine"的对象强制转换为类型"System.Collections.Generic.List`1FluentVision.Core.DefineBase"。

但是DefineBase是AnalogIoDefine的基类。

问了一下AI,发现可以用IEnumerable替代List:

cs 复制代码
 var result = queryAllMethod.Invoke(service, null);

 var list = (IEnumerable<DefineBase>)result;
 DefineInfoList.AddRange(list);

因为IEnumerable<T>支持协变:

相关推荐
张忠琳1 小时前
【Go 1.26.4】(Part 1) Go 1.26.4 超深度源码分析 — 总体架构与模块全景
开发语言·golang
guygg881 小时前
C# 生成中间带 Logo 头像的二维码
开发语言·c#
闪电悠米1 小时前
黑马点评-Redis 消息队列-03_stream_consumer_group
开发语言·数据库·redis·分布式·缓存·junit·lua
8125035331 小时前
第 9 篇:子网掩码:如何划分“小区”
开发语言·php
Jun6262 小时前
QT(12)-制作lib库
开发语言·qt
Java面试题总结2 小时前
C#12 中的 Using Alias
开发语言·windows·c#
加号32 小时前
【C#】 ASCII 码转字符串技术解析
开发语言·c#
Cloud_Shy6182 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第五章 Item 33 - 35)
开发语言·人工智能·笔记·python·学习方法
星恒随风2 小时前
C++ 类和对象入门(五):初始化列表、explicit 和 static 成员详解
开发语言·c++·笔记·学习·状态模式