7 Stimmen

Warum können diese Typargumente nicht automatisch abgeleitet werden?

Möglicher Duplikat:
C# 3.0 generische Typinferenz - Übergabe eines Delegaten als Funktionsparameter

Warum können die Typargumente des folgenden Codebeispiels im Aufruf in Main nicht abgeleitet werden?

using System;

class Program
{
    static void Main(string[] args)
    {
        Method(Action);
    }

    static void Action(int arg)
    {
        // ...
    }

    static void Method(Action action)
    {
        // ...
    }
}

Dies zeigt die folgende Fehlermeldung:

Fehler CS0411: Die Typargumente für die Methode Program.Method(System.Action) können nicht aus der Verwendung abgeleitet werden. Versuchen Sie, die Typargumente explizit anzugeben.

2voto

dlev Punkte 47336

Das Problem ist, dass Action (abgesehen davon, dass es bereits ein Typ ist; bitte umbenennen) tatsächlich eine Methodengruppe ist, die in den Delegattyp Action konvertierbar ist. Der Typ-Inferenz-Algorithmus kann den Typ nicht ableiten, weil Methodengruppenausdrücke typlos sind. Wenn Sie die Methodengruppe tatsächlich in Action umwandeln, gelingt die Typinferenz:

Method((Action)Action); // Legal

0voto

TheCodeKing Punkte 18776

Einfach dies in einen Compiler einfügen, dann verstehe ich, was du meinst.

Ich glaube, es liegt daran, dass Action als Methodengruppe verwendet wird, aber es ist nicht vom Typ Action.

Wenn du es auf diesen Typ castest, funktioniert es:

Method((Action)Action);

0voto

Samich Punkte 28587

Dies funktioniert:

    static void Main(string[] args)
    {
        Method(Action);
    }

    static void Action(int arg)
    {
        // ...
    }

    static void Method(Action action)
    {
        // ...
    }

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