Wenn die folgende Methodensignatur angegeben wird, warum kann ein Compiler den Typ nicht automatisch ableiten, wenn ein Parameter explizit benannt wird? Visual Studio 2010 SP1 kann den Typ ableiten und zeigt keine Warnungen oder Fehler an.Kann keinen generischen Typ mit optionalen Parametern ableiten
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);
}
es aufrufen, wie in CannotInferType
beschrieben, und wenn es der Compiler zu kompilieren versuchen emittiert error CS0411: The type arguments for method 'Test.ExecuteCommand<T>(string, string, System.Func<System.Data.IDataRecord,T>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
Während es nennen wie in CanInferType
Werken beschrieben, wie erwartet.
Wie oben erwähnt, meldet Visual Studio selbst keine Probleme, und intellisense für die Variable a
zeigt IEnumerable<SomeClass>
wie erwartet, aber aus irgendeinem Grund wird nicht kompiliert.
Es wäre hilfreich gewesen, wenn Sie ein kurzes, aber * vollständiges * Beispiel gegeben hätten ... –