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

D.W*_*der 5 c# linq casting

我有两节课:

public class Row : Dictionary<string,string> {}
public class Table : List<Row> {}
Run Code Online (Sandbox Code Playgroud)

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

Table table = new Table();
table = tableObject.Where(x => x.Value.Equals("")).ToList();
return table;
Run Code Online (Sandbox Code Playgroud)

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

  1. 使用(Table)转换会抛出InvalidCastException

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

  1. 使用as转换会导致null对象

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

Mon*_*Zhu 8

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

static class Extensions
{
    public static Table ToTable<T>(this IEnumerable<T> collection) where T: Row
    {
        Table table = new Table();
        table.AddRange(collection);
        return table;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

table = tableObject.Where(x => x.Value.Equals("")).ToTable();
Run Code Online (Sandbox Code Playgroud)

或者你可以直接创建,因为你创建一个空的Table:

Table table = new Table();
table.AddRange(tableObject.Where(x => x.Value.Equals("")));
return table;
Run Code Online (Sandbox Code Playgroud)