Lambda "if" - Anweisung?
Ich habe 2 Objekte, die ich beide konvertieren möchten, zu dictionarys. Ich benutze toDictionary<>().
Des lambda-Ausdrucks für ein Objekt um den key zu bekommen ist (ich => ich.name). Für die anderen, es ist (ich => ich.innere.name). In dem zweiten ich.name nicht vorhanden ist. ich.innere.name ist IMMER vorhanden wenn ich.name nicht.
Gibt es einen lambda-Ausdruck, den ich verwenden können, um kombinieren Sie diese beiden? Grundsätzlich ist zu Lesen als:
"wenn ich.Namen vorhanden ist, dann legen Sie id auf ich.name, anderes set-id zu ich.innere.Namen".
Vielen Dank.
Update
Wenn ich sage "nicht vorhanden" meine ich die Objekte nicht tatsächlich über die Eigenschaften, nicht, dass das Eigenschaften sind einfach null.
- Wenn Sie sagen, dass die Eigenschaften nicht vorhanden sind, meinst du, dass die Objekte, die eigentlich nicht die Eigenschaften besitzt, oder dass die Eigenschaften nur null?
- Die Objekte haben tatsächlich nicht die Eigenschaften.
- So dann diese zwei Typen sind zwei völlig unabhängigen Typen dann?
- ja. Allerdings, alle von Ihnen haben entweder eine name-Eigenschaft, oder ein Objekt.name-Eigenschaft vom Typ string.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht Sie geben jedem Objekt eine
ToDictionary
Methode von Ihrer eigenen, wie Sie haben offensichtlich Ihre eigenen Verhaltensweisen in diesem Fall.Wenn Sie können nicht hinzufügen zu den Objekten, denn Sie besitzen Sie nicht, Sie können immer schreiben, extension-Methoden für Sie.
Irgendeinem Grund Ihr versucht zu zwingen, füttern Sie Sie in eine "Allgemeine" Funktion?
Wenn dies zwei unterschiedliche (Referenz -) Typen dann können Sie testen Sie Sie mit dem
oder
da
keywords:Wenn Sie nicht überprüfen kann für bestimmte Arten dann können Sie verwenden Sie reflektion, um zu testen, für die
name
Immobilie selbst:i
zuTypeThatHasNameProperty
bevor Sie Zugriff auf dieName
Eigenschaft?as
ist wahrscheinlich passender als eine schlichte cast.)Ja, der bedingte operator ("ternärer operator") tut, was Sie wollen:
Vorausgesetzt natürlich, dass Sie kann erkennen die "Existenz" des namens, indem Sie für
null
.Bearbeiten: In diesem Fall Kirschstein Antwort ist natürlich besser.
etwas entlang der Linien von
(ungetestet) sollte den trick tun, wenn ich.der name ist nicht null (eine leere Zeichenkette), oder
(auch ungetestet)
als inline-if-Abfrage würde ich die Verwendung eines ternären operator, also: