我有两节课:
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的类型转换。
其他信息:无法将类型为'System.Collections.Generic.List`1 [Row]'的对象强制转换为'表'。
如何从IEnumerable中返回类型为 Table 的对象?
答案 0 :(得分: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;
}
}
现在您可以简单地调用此方法:
table = tableObject.Where(x => x.Value.Equals("")).ToTable();
或者您可以直接执行此操作,因为您创建了一个空的Table
:
Table table = new Table();
table.AddRange(tableObject.Where(x => x.Value.Equals("")));
return table;
答案 1 :(得分:3)
我假设您的tableObject
是List<Row>
。每个Table
是一个List<Row>
,但不是每个List<Row>
是一个Table
,这就是强制转换无效的原因。
听起来,提供构造函数将是一个显而易见的解决方案:
public class Table : List<Row>
{
public Table(IEnumerable<Row> rows) : base(rows) {}
}
table = new Table(tableObject.Where(x => x.Value.Equals("")));
答案 2 :(得分:1)
您应该执行以下操作:
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();
答案 3 :(得分:-1)
Table table = new Table();
未列出,因此您应该执行以下操作:
var tables = new List<Table>();
var tableObject = new List<Table>{};
tables = tableObject.ToList();