Mit Bedingungsoperator (?:) operator-Methode für Auswahl in C# (3.0)?

Ich bin refactoring von code.

Jetzt gibt es durchaus ein paar Orte, mit Funktionen wie diese:

string error;
if (a) {
   error = f1(a, long, parameter, list);
}
else {
   error = f2(the_same, long, parameter, list);
}

bevor refactoring f1 und f2 (die sind groß, aber ähnliche Dinge tun), würde ich gerne umgestalten zu:

string error = (a ? f1 : f2)(a, long, parameter, list);

Als würde man in C. (ist Die Funktion Signaturen sind identisch)

Aber ich bekomme eine Fehlermeldung:

"Fehler 13 Typ des bedingten Ausdrucks kann nicht bestimmt werden, denn es gibt keine implizite Konvertierung zwischen "Methode-Gruppe' und 'Methode-Gruppe'"

Dies würde mir erlauben, zu erkennen, dass die parameter-Listen identisch sind, die durch die Initiale refactoring geben invariant Verhalten, und auch umgestalten, die Aufrufe in einer einzigen Ort, der sicherstellt, dass alle in diesen verschiedenen refactorings, nichts kaputt, wie ich die Aufruf-Schnittstelle für die Methode.

Bin ich etwas fehlt klein, die es erlauben würde, eine syntax in der Nähe dieser arbeiten (im Gegensatz zu einer ganzen Reihe von zusätzlichen Delegaten-Typ-Definitionen etc)?

Sorry, zu Bearbeiten, aber es gibt tatsächlich einen Wert zurück, und ja, leider ist es ein string. ;-(

Gerade jetzt, ich bin für die Beilegung dieses:

string error = a ? f1(a, long, parameter, list) : f2(a, long, parameter, list);

Das problem ist, dass die parameter-Liste sind in der Tat sehr lange, und gehen zu bekommen, umgestaltet, und ich würde lieber haben Sie konsolidiert erste und befassen sich mit der compiler-Fehler, da ich diese ändern.

  • (gelöscht, all die Kommentare über operator benennen; eine Seite Thema am besten)
InformationsquelleAutor Cade Roux | 2011-03-03
Schreibe einen Kommentar