Учитывая следующую сигнатуру метода, почему при явном названии параметра компилятор не может автоматически определить тип? 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
В то время как вызов, как описано в , CanInferType
работает, как и ожидалось.
Как указано выше, сама Visual Studio не сообщает о проблемах, а intellisense для переменной a
показывает IEnumerable
, как и ожидалось, но по какой-то причине не компилируется.