为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
智慧大石 2022-01-15 17:25:33
我有两节课: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类型的对象?
查看完整描述

3 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您可以使用扩展方法来完成这项工作:


static class Extensions

{

    public static Table ToTable<T>(this IEnumerable<T> collection) where T: Row

    {

        Table table = new Table();

        table.AddRange(collection);

        return table;

    }

}

现在您可以简单地调用此方法:


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

或者您可以直接执行此操作,因为您创建了一个空的Table:


Table table = new Table();

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

return table;


查看完整回答
反对 回复 2022-01-15
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

我假设你tableObject是一个List<Row>. Every Tableis aList<Row>但不是every List<Row>is a Table,这就是强制转换不起作用的原因。


听起来提供构造函数将是一个明显的解决方案:


public class Table : List<Row>

{

    public Table(IEnumerable<Row> rows) : base(rows) {}

}

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


查看完整回答
反对 回复 2022-01-15
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

你应该这样做:


public class Row{

    //whatever you have inside it

    public string MyValue{get;set;}

}


public class Table{

    public List<Row> Rows{get;set;}

}


Table table = new Table();

//renaming tableObject to bigListOfRows

table.Rows = bigListOfRows.Where(x => x.MyValue.Equals("")).ToList();


查看完整回答
反对 回复 2022-01-15
  • 3 回答
  • 0 关注
  • 373 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信