我有一个Layer
集合,其中包含Content
个对象作为属性。如何将此Content
转换为其原始对象以在LINQ语句中获取其属性?
例如:
var item = Layers.FirstOfDefault(x =>(PushPin)x.Content.Description == "xyz");
在这种情况下,Content
属于PushPin
对象类型,我想将其Description
属性与xyz
进行比较
答案 0 :(得分:4)
用括号括起来
var item = Layers.FirstOfDefault(x => ((PushPin)x.Content).Description == "xyz");
答案 1 :(得分:3)
如果内容可以是PushPin之外的其他内容,那么您将需要类似
的内容var item = Layers.FirstOrDefault(x => x.Content is PushPin && ((PushPin)x.Content).Description == "xyz");
答案 2 :(得分:0)
如果图层中的所有内容对象都是PushPin对象,那么这应该没问题:
var item = Layers.Select(x => x.Content).Cast<PushPin>().FirstOrDefault(x => x.Description == "xyz");
但如果图层中有对象无法转换为PushPin,则会抛出InvalidCastException
。如果图层包含不同的对象类型,但您只需要PushPins,OfType
应该可以工作:
var item = Layers.Select(x => x.Content).OfType<PushPin>().FirstOrDefault(x => x.Description == "xyz");
答案 3 :(得分:0)
当Content
可以是PushPin
var item = Layers.Select(x => x.Content).OfType<PushPin>().FirstOfDefault(c => c.Description == "xyz");
或所有Content
都是PushPin
&#39;
var item = Layers.Select(x => x.Content).Cast<PushPin>().FirstOfDefault(c => c.Description == "xyz");
即。第一个将过滤PushPin
类型,第二个将所有内容投射到PushPin
。