Lambda "if" statement?
Yes, the conditional operator ("ternary operator") does what you want:
(i => i.name != null ? i.name : i.inner.name)
Assuming, of course, that you can detect the "existence" of the name by checking for null
.
Edit: In that case, Kirschstein's answer is better, of course.
If these are two distinct (reference) types then you can test them using the is
or as
keywords:
i => {
var x = i as TypeThatHasNameProperty;
return (x != null) ? x.name : i.inner.name;
}
If you can't test for specific types then you can use reflection to test for the name
property itself:
i => {
var pi = i.GetType().GetProperty("name");
return (pi != null) ? pi.GetValue(i, null) : i.inner.name;
}
Why don't you give each object a ToDictionary
method of their own, as they obviously have their own behaviours in this case.
If you can't add to the objects, because you don't own them, you can always write extension methods for them.
Any reason your trying to force feed them into one "common" function?