亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 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 關注
  • 399 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號