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

相关推荐
星恒随风24 分钟前
C++ STL 详解:list 的使用、迭代器失效、模拟实现与 vector 对比
开发语言·数据结构·c++·笔记·学习·list
Tim_1030 分钟前
【C++】019、内存泄漏
java·开发语言
牢姐与蒯37 分钟前
c++之异常
开发语言·c++·c++11
此生决int38 分钟前
深入理解C++系列(02)——类和对象(上)
开发语言·c++
-银雾鸢尾-6 小时前
C#中的拓展方法
开发语言·c#
guodingdingh8 小时前
软件开发工作问题总结0718
java·开发语言·数据库
优橙教育10 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
SeaTunnel11 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
碎光拾影12 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Marst Code12 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python