5 Stimmen

Shorthand beim Aufruf generischer Methoden in c#

Wenn ich die Methode

void foo<T>(T bar){}

Ich kann es erfolgreich so nennen:

string s = string.Empty;
foo(s);

Ich kann mir vorstellen, dass der Compiler/die Laufzeitumgebung den Typ ableiten kann,

Wenn ich die Methode jedoch so ändere:

T foo<T,T2>(T2 bar){...}

Dann muss ich sie "vollständig" aufrufen und dabei sowohl den Typ des Eingabeparameters als auch den Rückgabetyp angeben:

string s = string.Empty;
foo<int,string>(s);

Gibt es eine Möglichkeit, ich kann dies abkürzen, so dass ich nicht brauchen, um die Eingabeparameter (s) Typ angeben? D.H..

foo<int>(s);

Gracias

3voto

Alexander Yezutov Punkte 3044

Leider gibt es keine Möglichkeit für den Compiler, die T aus dem Beispiel aus der Verwendung. Soweit dies nicht automatisch geschehen kann, müssen Sie es selbst tun.

In C# gibt es keine "optionalen" Typparameter und keine Kurzbefehle.

3voto

Simon Cowen Punkte 1893

Sie können Ihre Methode jederzeit umschreiben:

void foo<T, U>(U bar, out T baz)
{
    baz = default(T);
}

wenn Sie die Typ-Inferenz wirklich wollen... Jetzt:

string s = string.Empty;
int i;

foo(s, out i);

wird gut funktionieren.

Siehe auch: diese Frage für eine ausgezeichnete Antwort von Eric Lippert auf die Frage, warum man nicht haben kann, was man will!

EDIT: Mir ist klar, dass ich Ihre Frage nicht wirklich beantwortet habe...

Gibt es einen Weg, wie ich dies abkürzen kann, so dass ich nicht die Typ des/der Eingabeparameter(s) nicht angeben muss?

Einfach gesagt... Nein.

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