Невозможно определить общий тип с необязательными параметрами

Учитывая следующую сигнатуру метода, почему при явном названии параметра компилятор не может автоматически определить тип? Visual Studio 2010 с пакетом обновления 1 (SP1) может определить тип и не выдает предупреждений или ошибок.

IEnumerable<T> ExecuteCommand<T>(
    string commandText,
    string connectionName = null,
    Func<IDataRecord, T> converter = null) { ... }

static SomeClass Create(IDataRecord record) { return new SomeClass(); }

void CannotInferType() {
    var a = ExecuteCommand(
        "SELECT blah",
        "connection",
        converter: Test.Create);
}

void CanInferType() {
    var a = ExecuteCommand(
        "SELECT blah",
        "connection",
        Test.Create);
}

Вызов его, как описано в CannotInferType, и при попытке компиляции компилятор выдает ошибку CS0411: Аргументы типа для метода 'Test.ExecuteCommand(string, string, System.Func )' нельзя вывести из использования. Попробуйте явно указать аргументы типа. В то время как вызов, как описано в , CanInferTypeработает, как и ожидалось.

Как указано выше, сама Visual Studio не сообщает о проблемах, а intellisense для переменной aпоказывает IEnumerable, как и ожидалось, но по какой-то причине не компилируется.

7
задан Joshua 27 March 2012 в 22:12
поделиться