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>支持协变:

相关推荐
熊猫钓鱼>_>3 分钟前
大学图论第 6 讲:网络流与二分图匹配——对偶性让瓶颈自己现形
开发语言·算法·面试·职场和发展·图论·校招·面经
方便面不加香菜4 分钟前
C++ 关于多态的知识点讲解
开发语言·c++
jimy124 分钟前
C++ 类成员函数的内联定义(inline)详解
开发语言·c++
Nebula_g30 分钟前
JavaSE高级:动态代理
java·开发语言·算法·javase
Behavior33 分钟前
Unity 7.0 Alpha 拆解:编辑器干掉 Mono 换 CoreCLR
c#·unity3d·游戏开发
青春逝如流水1 小时前
Java 线程与操作系统、硬件的关系:状态、映射与差异
java·开发语言·多线程·ai文章
谢亮_vipxieliang1 小时前
Go gRPC基础与实战
开发语言·后端·golang
淡海水1 小时前
02-06-原理篇-增量式GC与并发GC
算法·unity·c#·并发·gc·增量
Aurorar0rua1 小时前
CS50 x 2024 Notes Data structures - 08
c语言·开发语言·学习方法
企业数字化笔记1 小时前
新租户注册成功却不能用?开通状态、初始化恢复与可用性验收
开发语言·python