在LINQ语句中转换对象类型

时间:2014-08-01 09:10:19

标签: c# linq collections

我有一个Layer集合,其中包含Content个对象作为属性。如何将此Content转换为其原始对象以在LINQ语句中获取其属性?

例如:

var item = Layers.FirstOfDefault(x =>(PushPin)x.Content.Description == "xyz");

在这种情况下,Content属于PushPin对象类型,我想将其Description属性与xyz进行比较

4 个答案:

答案 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