Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ语句中的强制转换对象类型_C#_Linq_Collections - Fatal编程技术网

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");