C# LINQ语句中的强制转换对象类型
我有一个C# LINQ语句中的强制转换对象类型,c#,linq,collections,C#,Linq,Collections,我有一个层集合,其中包含一个内容对象作为属性。如何将此内容强制转换到其原始对象,以在LINQ语句中获取其属性 例如: var item = Layers.FirstOfDefault(x =>(PushPin)x.Content.Description == "xyz"); 在本例中,Content属于PushPin对象类型,我想将其描述属性与xyz进行比较,并用括号括起来 var item = Layers.FirstOfDefault(x => ((PushPin)x.Cont
层
集合,其中包含一个内容
对象作为属性。如何将此内容
强制转换到其原始对象,以在LINQ语句中获取其属性
例如:
var item = Layers.FirstOfDefault(x =>(PushPin)x.Content.Description == "xyz");
在本例中,
Content
属于PushPin
对象类型,我想将其描述
属性与xyz
进行比较,并用括号括起来
var item = Layers.FirstOfDefault(x => ((PushPin)x.Content).Description == "xyz");
如果内容可以是图钉以外的东西,那么您将需要沿着
var item = Layers.FirstOrDefault(x => x.Content is PushPin && ((PushPin)x.Content).Description == "xyz");
如果图层中的所有内容对象都是图钉对象,则您可以:
var item = Layers.Select(x => x.Content).Cast<PushPin>().FirstOrDefault(x => x.Description == "xyz");
当
内容
可以是其他内容时,则图钉
var item = Layers.Select(x => x.Content).OfType<PushPin>().FirstOfDefault(c => c.Description == "xyz");
i、 e.第一个将过滤
图钉
类型,第二个将把所有内容强制转换为图钉
接受此答案后,请注意内容不是图钉类型的情况,因为代码将引发异常。此外,如果Content属性始终为PushPin类型,则我建议将其类型更改为PushPin,以避免筛选器中的装箱操作。在我看来,这是一个更完整的示例,因为它可以防止由于不正确的强制转换而发生异常。
var item = Layers.Select(x => x.Content).OfType<PushPin>().FirstOfDefault(c => c.Description == "xyz");
var item = Layers.Select(x => x.Content).Cast<PushPin>().FirstOfDefault(c => c.Description == "xyz");