Der elvis-Operator, auch bekannt als Null-Conditional-Operator, ist massiv cool.Elvis-Operator in einer Casting-Aufrufkette
In LINQ-Abfragen funktioniert es gut zusammen mit dem Null-Koaleszenz "??" Operator.
Somedata.Where(dt=>(dt?.Inner?.InnerMost?.Include=="Yes")??false);
Aber was tun Sie, wenn Sie die Zwischenwerte werfen müssen?
Für einen Link in der Kette funktioniert es gut.
Somedata.Where(dt=>(
((InnerClass)dt?.Inner)
?.InnerMost)?.Include=="Yes")
??false);
Aber mit zusätzlichen notwendigen Casts werden der Cast und der Aufruf "auseinander getrieben".
Vermasselt wahrscheinlich die Klammer mehr als einmal hier, aber ich hoffe, Sie bekommen die Idee.
Obwohl diese "Trainwreck" -Aufrufskette ein Code-Geruch ist, gibt es einen expressiveren Weg, dies zu tun, um Prägnanz und Klarheit zu verbessern?
Dies ist ein wenig besser aussehen '((((dt als InnerClass)?. Inner) als InnerMostClass)?. InnerMost) ?. Include == "Yes")) ?? false ' – Andrey
Ich kann nichts besseres als @Andrey Lösung denken, andere dann, natürlich nicht diese Art von Aussagen in erster Linie schreiben. Es macht Spaß, so viel Funktionalität wie möglich in so wenige Zeilen wie möglich zu pressen, aber dafür gibt es Code-Golf. Für Code, den Benutzer pflegen müssen, ist meine Rolle des Daumens, dass, wenn Sie nicht auf einen Blick sagen können, was ein Lambda tut, sollte es eine benannte Funktion sein ... gute Frage aber ... – pseudoDust
Ich bin mit pseudoDust : Ich würde diese Aussage verwerfen. Die Menge an Gehirnkraft, die Sie aufwenden müssen, um herauszufinden, was es macht, ist ein Code-Geruch. Außerdem wäre ich besorgt darüber, in welcher Situation ich mich befand, wo ich einen Elternteil und seine Kinder werfen muss, von denen alle null sein können. – CptCoathanger