Почему нельзя выводить аргументы типа из этого простого кода? - PullRequest
3 голосов
/ 15 июля 2011

Использование .NET 3.5, но вызов Select выдает ошибку. Разве компилятор не должен быть достаточно умным, чтобы вывести это? Если нет, то почему?

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

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

Ответы [ 2 ]

4 голосов
/ 15 июля 2011

Свойство 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 голос
/ 15 июля 2011
table.Rows.OfType<DataRow>().Select(RowToCustomer);
...