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

时间:2011-07-15 13:35:39

标签: linq compiler-construction c#-3.0

使用.NET 3.5,但Select调用会出错。编译器不应该足够聪明地推断出这个吗?如果没有,为什么不呢?

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

private Customer RowToCustomer(TableRow row)
{
    return new Customer { ... };
}

2 个答案:

答案 0 :(得分: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 :(得分:1)

table.Rows.OfType<DataRow>().Select(RowToCustomer);