如何将 List 转换为从 List<T> 继承的类型?

我有两节课:


public class Row : Dictionary<string,string> {}

public class Table : List<Row> {}

在应该返回Table类型对象的方法中,我尝试使用Where -Statement过滤Table类型的对象,并在过滤后返回此对象。


Table table = new Table();

table = tableObject.Where(x => x.Value.Equals("")).ToList();

return table;

我的问题是生成的 IEnumerable 的演员表。


使用(Table)进行转换会引发 InvalidCastException

附加信息:无法将“System.Collections.Generic.List`1[Row]”类型的对象转换为“Table”类型。


使用as Table进行转换会产生一个空对象

如何从 IEnumerable中返回Table类型的对象?


智慧大石
浏览 374回答 3
3回答

素胚勾勒不出你

您可以使用扩展方法来完成这项工作:static class Extensions{&nbsp; &nbsp; public static Table ToTable<T>(this IEnumerable<T> collection) where T: Row&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Table table = new Table();&nbsp; &nbsp; &nbsp; &nbsp; table.AddRange(collection);&nbsp; &nbsp; &nbsp; &nbsp; return table;&nbsp; &nbsp; }}现在您可以简单地调用此方法:table = tableObject.Where(x => x.Value.Equals("")).ToTable();或者您可以直接执行此操作,因为您创建了一个空的Table:Table table = new Table();table.AddRange(tableObject.Where(x => x.Value.Equals("")));return table;

至尊宝的传说

我假设你tableObject是一个List<Row>. Every Tableis aList<Row>但不是every List<Row>is a Table,这就是强制转换不起作用的原因。听起来提供构造函数将是一个明显的解决方案:public class Table : List<Row>{&nbsp; &nbsp; public Table(IEnumerable<Row> rows) : base(rows) {}}table = new Table(tableObject.Where(x => x.Value.Equals("")));

白衣染霜花

你应该这样做:public class Row{&nbsp; &nbsp; //whatever you have inside it&nbsp; &nbsp; public string MyValue{get;set;}}public class Table{&nbsp; &nbsp; public List<Row> Rows{get;set;}}Table table = new Table();//renaming tableObject to bigListOfRowstable.Rows = bigListOfRows.Where(x => x.MyValue.Equals("")).ToList();
打开App,查看更多内容
随时随地看视频慕课网APP