.NET Core泛型集合转换报错:List<List<T>>无法隐式转为IList<IList<T>>
类型转换报错解决
你不需要补充显式转换,该错误是C#泛型不变性导致的类型不兼容问题:IList<T>的泛型参数不支持协变,因此List<List<T>>无法转换为IList<IList<T>>,哪怕List<T>实现了IList<T>接口也不支持该转换,强行显式转换也会运行失败。
正确的初始化写法如下:
response.historicalDataMeasurement.equipments = new List<IList<SCP.Kafka.AvroSchemas.historicalDataMeasurementInfo>>();
后续你往这个集合里添加List<historicalDataMeasurementInfo>类型的元素是完全合法的,因为单个List<T>实例可以隐式转换为IList<T>类型。
空实例异常解决
该异常有两种常见触发原因,按顺序排查即可:
- 你之前的初始化代码因为类型报错执行失败,导致
equipments属性始终为null,调用Add方法自然抛出空引用异常,替换为上面的正确初始化代码即可解决。 response.historicalDataMeasurement本身没有初始化,为null,访问其equipments属性时就会抛出异常,需要先给该属性实例化对应的类对象。
完整可运行示例代码
// 先实例化historicalDataMeasurement,替换为你实际的类名 response.historicalDataMeasurement = new HistoricalDataMeasurementType(); // 正确初始化嵌套列表属性 response.historicalDataMeasurement.equipments = new List<IList<SCP.Kafka.AvroSchemas.historicalDataMeasurementInfo>>(); // 构造要添加的子集合 List<SCP.Kafka.AvroSchemas.historicalDataMeasurementInfo> historicalDataList = new List<SCP.Kafka.AvroSchemas.historicalDataMeasurementInfo>(); // 往子集合添加元素的逻辑省略 // 正常添加子集合到外层列表 response.historicalDataMeasurement.equipments.Add(historicalDataList);
内容的提问来源于stack exchange,提问作者ojoaovitoraraujo
相关产品推荐
相关产品推荐

