ich diesen Code haben, wo LongMethodWithResult
ist ein Verfahren, das eine lange Zeit dauert, laufen:Concise Art und Weise der Verwendung von Konditionaloperator
object o = LongMethodWithResult() == someVal ? LongMethodWithResult() : someOtherResult;
Nun ist die LongMethodWithResult
Methode zweimal ausgewertet wird, ist es nicht?
Ich weiß, ich könnte eine Methode schreiben, die Variablen zu speichern, das Ergebnis des langen Verfahrens, so etwas wie diese verwendet:
public static object ConciseConditionalOperator(object a, object b, object c)
{
return a == b ? a : c;
}
Aber ich würde interessieren, ob es eine beste Art und Weise zu tun, Dies oder einige Funktionen, die von C# oder .NET bereitgestellt werden.
Alle Ideen sind willkommen!
In Ihrem Fall können Sie nicht tun 'Objekt o = LongMethodWithResult() == someVal? someVal: someOtherResult; '? – KMoussa
Ich würde als Faustregel die Verwendung von bedingten Ausdrücken auf einfache logische Ausdrücke ohne Nebenwirkungen begrenzen, die eine Auswahl zwischen zwei Werten auslösen. Das typische Beispiel von K & R ist die Auswahl zwischen einem plural s und einem leeren String beim Drucken eines Textes, abhängig von einer Zahl! = 1. –
Um @ PeterBs (noch aufschlussreiche) Abkürzung zu vermeiden, könnten Sie nach einer anderen Beziehung als Identität fragen, z. 'LongMethodWithResult() <= einigeVal? ... ' –