You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

泛型Cell类排序问题:ToArray()引发InvalidCastException异常原因

异常原因分析

核心原因:泛型类型的不变性

C#中默认的泛型类是不变的——哪怕string是object的子类,Cell<string>和Cell<object>也是完全独立的类型,无法直接互相强制转换。你的代码里试图把RowData中实际存在的Cell<string>或Cell<int>实例强转为Cell<object>,这本身就是不合法的类型转换操作。

延迟执行导致异常时机差异

  • results1是LINQ的延迟查询对象,此时仅构建了查询逻辑,并未实际遍历数据执行类型转换,所以不会立刻触发异常;
  • results2调用ToArray()时,会触发LINQ查询的实际执行,程序此时尝试对每个元素执行(Cell<object>)强制转换,类型不匹配的问题直接暴露,抛出InvalidCastException。

额外说明

你的Cell<T>实现了IComparable<Cell<T>>接口,但该接口是针对具体泛型参数T设计的,仅支持相同T类型的Cell实例比较,这也意味着跨T类型的强制转换比较逻辑本身就不符合类的设计预期。

内容的提问来源于stack exchange,提问作者Amir Rezaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 19:41:25