C# 转换问题 : from IEnumerable to custom type

标签 c# linq inheritance interface casting

我有一个名为 Rows 的自定义类实现 IEnumerable<Row> .我经常在 Rows 上使用 LINQ 查询实例:

Rows rows = new Rows { row1, row2, row3 };
IEnumerable<Row> particularRows = rows.Where<Row>(row => condition);

我希望能够做到以下几点:

Rows rows = new Rows { row1, row2, row3 };
Rows particularRows = (Rows)rows.Where<Row>(row => condition);

但是,我收到“System.InvalidCastException:无法将类型为‘WhereEnumerableIterator1[NS.Row]’的对象转换为类型‘NS.Rows’”。我有一个Rows构造函数 IEnumerable<Row> ,所以我可以这样做:

Rows rows = new Rows { row1, row2, row3 };
Rows particularRows = new Rows(rows.Where<Row>(row => condition));

然而,这看起来很笨重,我希望能够投出一个 IEnumerable<Row>成为RowsRows工具 IEnumerable<Row> .有什么想法吗?

最佳答案

救援的扩展方法。

public static Rows ToRows(this IEnumerable<Row> source)
{
  return new Rows(source);
}

行 particularRows = rows.Where(...).ToRows();


“类型转换”不适合解决这个问题。每个Rows是一个 IEnumerable<Row> , 但不是每个 IEnumerable<Row>Rows

关于C# 转换问题 : from IEnumerable to custom type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2904977/

相关文章:

java - 跨项目的继承和可见性

c# - 如何在测试平板电脑(即非开发机器)上安装Windows8应用程序;关于签名损坏的错误

c# - 如何使用 C# 访问控制面板-> 声音-> 通信对话框?

c# - 是否可以等待一个事件而不是另一个异步方法?

linq - 在 LINQ 中获得最大值(value)的最佳方式?

c# - 如何将 LINQ 查询限制为给定营销事件的营销列表?

android - 在android中的所有子 Activity 中显示来自一个父 Activity 的 View

c++ - 重写模板类中的虚函数时出错

c# - Unity,c++ native 插件不匹配的字节数组

c# - 使用传入的参数作为搜索字段使用 Entity Framework Web API 创建动态搜索查询