11 Stimmen

Warum funktioniert die generische Typinferenz in diesem Fall nicht?

Wenn ich versuche, den folgenden Code in LINQPad zu kompilieren, wird er nicht angezeigt:

void Main()
{
    DriveInfo.GetDrives().Select(GetProviderName).Dump();
}

static string GetProviderName(DriveInfo drive)
{
    // some irrelevant WMI code...
}

Ich erhalte die folgende Fehlermeldung:

Die Typargumente für die Methode 'System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable, System.Func)' können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.

Wenn ich ein Lambda verwende wie d => GetProviderName(d) anstelle einer Methodengruppe, funktioniert es gut... Ich bin ziemlich überrascht, denn ich war mir sicher, dass der Compiler in der Lage sein würde, den Typ aus der Methodengruppe abzuleiten. Es gibt keine andere GetProviderName Methode im Anwendungsbereich, und die Eingabe- und Ausgabetypen sind klar definiert, so dass sie implizit in eine Func<DriveInfo, string> ... oder etwa nicht?

8voto

SLaks Punkte 832502

Dies ist eine Einschränkung des Compilers, die in C# 4.0 behoben wurde.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X