3 Stimmen

Wie verwendet man Func<T, bool> als Parameter für Func<Objekt, bool>?

Ich habe eine Methode mit einer Erklärung wie dieser:

public void OriginalMethod(Func<object,bool> selector)

Und ich möchte es von einer generischen Methode aus aufrufen, die eine Erklärung wie diese hat:

public void GenericMethod<T>(Func<T, bool> selector)

Wie kann ich das tun?

6voto

Thomas Levesque Punkte 277723

Sie können nicht über die selector direkt an OriginalMethod : Sie erwartet eine Methode, die jede object sondern ein Func<T, bool> akzeptiert nur ein Objekt vom Typ T .

Natürlich kann man auch schummeln:

OriginalMethod(o => selector((T)o));

Aber wenn OriginalMethod die Methode mit einem Objekt aufruft, das nicht in T konvertierbar ist, schlägt sie fehl...

3voto

George Duckett Punkte 31040

Sie müssen eine Func<object, bool> die das eingegebene Programm aufruft, das übergeben wurde.

public void GenericMethod<T>(Func<T, bool> selector)
{
    Func<object, bool> untypedSelector = (object obj) => selector((T)obj);

    OriginalMethod(untypedSelector);
}

Entweder wie oben, oder ein Einzeiler wie Marcs Antwort .

3voto

Marc Gravell Punkte 970173
OriginalMethod(arg => selector((T)arg));

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