Gibt es einen besseren Weg, um auszudrücken, einen parameterlosen lambda als () =>?
Den ()
albern. gibt es einen besseren Weg?
Beispiel:
ExternalId.IfNotNullDo(() => ExternalId = ExternalId.Trim());
Du musst angemeldet sein, um einen Kommentar abzugeben.
Art! Es gibt eine neue idiom in der Stadt, das ist schön und kann Ihnen helfen, in einigen Fällen. Es ist nicht ganz, was Sie wollen, aber manchmal denke ich, Sie werden es mögen.
Seit Unterstrich ("_") ist ein Gültiger C# - Bezeichner, es wird immer eine gemeinsame idiom zu verwenden, die als parameter den Namen einer lambda in den Fällen, wo Sie planen, zu ignorieren die parameter sowieso. Wenn andere Programmierer sind sich bewusst von der Sprache, wissen Sie sofort, dass der parameter ist irrelevant.
Beispiel:
Leicht zu geben, vermittelt Ihre Absicht, und die ist leichter auf die Augen als auch.
Natürlich, wenn Sie die Weitergabe Ihrer lambda-Ausdruck etwas, die erwartet, dass ein Ausdruck, der Baum, das kann nicht funktionieren, weil Sie jetzt vorbei sind eine ein-parameter-lambda anstelle von einer nicht-parameter lambda.
Aber für viele Fälle ist es eine schöne Lösung.
RelayCommand(_ => { task.ContinueWith(_ => { // do stuff } }
funktioniert nicht aufgrund einer Kollision auf der Unterstrich. Aber, verwenden Sie möglicherweise zu viele lambda an diesem Punkt 😉()
. Außerdem, es ist nicht die Frage beantworten, wie der Unterstrich Ansatz nicht für die Arbeit parameterlosen lambdas. Wenn ich Plane, Sie zu ignorieren die Parameter,delegate { ... }
(siehe Mark ' s Antwort)._
statt()
. In dem Fall, wo die OP wirklich nicht sind alle Parameter, einschließlich das Beispiel in der Frage - diese Antwort überhaupt nicht helfen. Ich möchte nicht behaupten, zu wissen, warum die OP war begeistert von diesemAction
oderFunc<T>
zum Beispiel.)_
) möglicherweise verwirrend/irreführend, meine Firma entwickelt sich in Murks C# und Scala. In Scala können Sie die_
Zeichen zu ersetzen, one-time-Verwendung von Variablen in einem lambda-Ausdruck. Zum Beispiel(x, y) => x + y
ersetzt werden kann, mit_ + _
. Aus diesem Grund möchte ich wirklich nicht mit der_
für diesen Zweck. Hier gibt es mehr Informationen auf der Scala ist die Verwendung von_
.delegate { }
statt. Es gibt jedoch einige Fälle, in denen es einen Unterschied gibt zwischen() => { blah }
unddelegate { blah }
. Für eine vollständige Erklärung finden Sie hier: stackoverflow.com/questions/299703/...Für einen lambda-Ausdruck, Nein: Sie müssen
() =>
Ist es für eine Delegierte oder ein Ausdruck? Für die Delegierten, eine weitere option ist
delegate {...}
. Dies kann oder kann nicht wünschenswert sein, je nach Szenario. Es ist mehr Tasten, sicherlich...In einigen Fällen (nicht in diesem) kann man über ein Ziel-Methode, die direkt - d.h.
Nein, gibt es nicht. Lambda-Ausdrücke sind optimiert (in Bezug auf syntax) für die einzelnen parameter-Fall.
Ich weiß, dass das C# - team fühlt sich Ihre Schmerzen, und haben versucht, alternativen zu suchen. Ob es jemals sein wird oder nicht, ist eine andere Frage.
Im wesentlichen, was Sie suchen, für die ist die umkehrfunktion der
??
null coalescing operator (genanntNullable<T>.GetValueOrDefault()
unter der Decke) - problem ist C# nicht, eine ordentlich OOTB Antwort.Weiß nicht genau, was du tust, sondern wie du tust:
vielleicht finden Sie auch einen nutzen für:
ermöglichen würde:
(im Allgemeinen, ich würde versuchen, um zu Steuern Weg von Wiederverwendung /mutierenden Variablen, wie Sie scheinen, zu tun und stattdessen gehen Sie in eine erklärende Variable Einführen /Split Temporary Variable Richtung, D. H., verwenden Sie eine neue variable, anstatt
value = value.DefaultOr( _ => _.Trim());
)?.
? Lesen Sie die Antworten, ich halte dies hier als marker zu sehen, wie lange es dauert, für die akzeptierte Antwort, die werden nicht akzeptiert...