J'ai 2 objets, dont tous les deux, je veux convertir en dictionnaires. J'utilise TODICTIONY <> (). P>
L'expression Lambda pour un objet pour obtenir la clé est (i => i.name). Pour l'autre, c'est (i => i.inner.name). Dans le second, je n'existe pas. i.inner.name existe toujours si je ne le fais pas. p>
Y a-t-il une expression lambda que je peux utiliser pour combiner ces deux? Fondamentalement à lire comme: p>
"Si i.Name existe alors définissez ID sur i.Name, sinon Set ID sur i.inner.name". p>
Merci beaucoup. P>
Quand je dis "n'exister pas", je veux dire que les objets n'ont pas réellement les propriétés, et non que les propriétés ne sont que null. p>
5 Réponses :
Oui, l'opérateur conditionnel ("Opérateur ternaire") fait ce que vous voulez:
(i => i.name != null ? i.name : i.inner.name)
Ce que je voulais dire, c'est que je n'existe pas du tout. Le nom de la propriété n'est pas là. Je ne peux pas utiliser null. Toutes mes excuses si je faisais cela peu clair.
Quelque chose le long des lignes de (non testé) devrait faire l'astuce si j'étais nul (une chaîne vide) ou p> (aussi non testé) p> p>
Si ce sont deux types distincts (référence), vous pouvez les tester à l'aide de Si vous ne pouvez pas tester pour des types spécifiques, vous pouvez utiliser la réflexion pour tester la propriété code> nom code> p> est code>
ou comme Code>
Mots-clés:
Vous n'avez pas besoin de lancer i code> à
tysethaThasnameProperty code> avant d'accéder à la propriété code> nom code>?
@DTB: Probablement, je suppose que cela dépend de ce que ressemble au reste du code de l'OP. (Mais cela ne ferait aucun mal à faire de la mouche de toute façon, bien que dans mon exemple de code, je pense qu'utiliser comme code> est probablement plus approprié qu'un casting simple.)
Excellent travail sur cette réponse
C'est une réponse plus appropriée
Pourquoi ne donnez-vous pas à chaque objet un Si vous ne pouvez pas ajouter aux objets, car vous ne les possédez pas, vous pouvez toujours écrire des méthodes d'extension. P>
Toute raison que vous essayez de forcer à les nourrir dans une fonction "commune"? p> TODICTION code> méthode de leur propre, car ils ont évidemment leurs propres comportements dans ce cas. P>
Peut-être que le remplacement de Tostring () serait le meilleur choix de comportement pour ces objets. Bien sûr, cela dépend de la question de savoir si vous comptez sur un autre comportement à Tostring () ailleurs ...
@Sekhat je venais de voir si je pouvais la combiner dans une seule fonction car je dois le faire plusieurs fois. Pour l'amour de la propreté.
comme une inline si requête, je voudrais utiliser un opérateur ternaire, donc:
Si vous dites que les propriétés n'existent pas, voulez-vous dire que les objets n'ont réellement pas les propriétés, ni que les propriétés ne sont que null?
Les objets n'ont pas réellement les propriétés.
Alors, ces deux types sont deux types complètement non liés alors?
@ shf301 oui. Cependant, tous ont une propriété de nom ou un objet.Name propriété de type chaîne.