我有两个对象,我想将它们转换为dictionarys.我用toDictionary <>().
获取密钥的一个对象的lambda表达式是(i => i.name).对于另一个,它是(i => i.inner.name).在第二个中,i.name不存在.如果i.name没有,i.inner.name总是存在.
是否有一个lambda表达式可以用来组合这两个?基本上读作:
"如果i.name存在,则将id设置为i.name,否则将id设置为i.inner.name".
非常感谢.
更新
当我说"不存在"时,我的意思是对象实际上没有属性,而不是属性只是null.
Luk*_*keH 14
如果这些是两种不同的(引用)类型,那么您可以使用is或as关键字测试它们:
i => {
var x = i as TypeThatHasNameProperty;
return (x != null) ? x.name : i.inner.name;
}
Run Code Online (Sandbox Code Playgroud)
如果您无法测试特定类型,那么您可以使用反射来测试name属性本身:
i => {
var pi = i.GetType().GetProperty("name");
return (pi != null) ? pi.GetValue(i, null) : i.inner.name;
}
Run Code Online (Sandbox Code Playgroud)
是的,条件运算符(“三元运算符”)执行您想要的操作:
(i => i.name != null ? i.name : i.inner.name)
Run Code Online (Sandbox Code Playgroud)
当然,假设您可以通过检查null.
编辑:在那种情况下,当然,Kirschstein 的回答更好。
为什么不给每个对象一个ToDictionary自己的方法,因为在这种情况下它们显然有自己的行为。
如果您无法添加对象,因为您不拥有它们,您始终可以为它们编写扩展方法。
你有什么理由试图强迫它们进入一个“通用”功能?
| 归档时间: |
|
| 查看次数: |
53172 次 |
| 最近记录: |