在LINQ语句中强制转换对象类型
本文关键字:转换 对象 类型 LINQ 语句 | 更新日期: 2023-09-27 18:16:08
我有一个Layer
集合,其中包含一个Content
对象作为属性。我如何将这个Content
转换为其原始对象以获得其在LINQ语句中的属性?
var item = Layers.FirstOfDefault(x =>(PushPin)x.Content.Description == "xyz");
在本例中,Content
是PushPin
对象类型,我想将其Description
属性与xyz
进行比较
如果Content可以是PushPin以外的东西,那么你需要在
var item = Layers.FirstOrDefault(x => x.Content is PushPin && ((PushPin)x.Content).Description == "xyz");
用圆括号括起来
var item = Layers.FirstOfDefault(x => ((PushPin)x.Content).Description == "xyz");
如果图层中的所有内容对象都是PushPin对象,这应该没问题:
var item = Layers.Select(x => x.Content).Cast<PushPin>().FirstOrDefault(x => x.Description == "xyz");
但这将抛出一个InvalidCastException
,如果有对象在层不能被强制转换为PushPin。如果图层包含不同的对象类型,但你只需要PushPins, OfType
应该工作:
var item = Layers.Select(x => x.Content).OfType<PushPin>().FirstOrDefault(x => x.Description == "xyz");
当Content
可以是PushPin
以外的东西
var item = Layers.Select(x => x.Content).OfType<PushPin>().FirstOfDefault(c => c.Description == "xyz");
或当所有Content
都是PushPin
时
var item = Layers.Select(x => x.Content).Cast<PushPin>().FirstOfDefault(c => c.Description == "xyz");
。第一个将过滤PushPin
类型,第二个将把所有内容转换为PushPin
。