为什么不能从这个简单的代码推断出类型参数?

问题描述 投票:0回答:2

使用 .NET 3.5,但

Select
调用会出现错误。难道编译器不应该足够聪明来推断这一点吗?如果没有,为什么不呢?

public IEnumerable<Customer> TableToCustomers(Table table)
{
    return table.Rows.Select(RowToCustomer);
}

private Customer RowToCustomer(TableRow row)
{
    return new Customer { ... };
}
linq c#-3.0
2个回答
4
投票

Rows
属性定义为
TableRowCollection Rows {get;}

public sealed class TableRowCollection : IList, ICollection, IEnumerable

它不是

IEnumerable<TableRow>
,所以它只是
IEnumerable
,因此它不能推断类型为
TableRow

您可以这样做:

public IEnumerable<Customer> TableToCustomers(Table table)
{
    return table.Rows.Cast<TableRow>().Select(RowToCustomer);
} 

1
投票
table.Rows.OfType<DataRow>().Select(RowToCustomer);
© www.soinside.com 2019 - 2024. All rights reserved.