Vb.net LinqToObject查询无法强制转换类型为的对象

Vb.net LinqToObject查询无法强制转换类型为的对象,vb.net,linq-to-objects,Vb.net,Linq To Objects,为什么这个查询不起作用 Private mapOverlays As New List(Of GMapOverlay) Dim mapOverlay = mapOverlays.Where(Function(x) x.Id = overlay.Name).Distinct() DirectCast(mapOverlay,GMapOverlay).IsVisibile = False 我发现了错误 无法强制转换类型为的对象 “d_u7a`1[GMap.NET.WindowsForms.GMap

为什么这个查询不起作用

Private mapOverlays As New List(Of GMapOverlay)

Dim mapOverlay = mapOverlays.Where(Function(x) x.Id = overlay.Name).Distinct()
DirectCast(mapOverlay,GMapOverlay).IsVisibile = False
我发现了错误

无法强制转换类型为的对象 “d_u7a`1[GMap.NET.WindowsForms.GMapOverlay]”以键入 “GMap.NET.WindowsForms.GMapOverlay”


因为mapOverlay是mapOverlays的可枚举项,而不仅仅是一个mapOverlay

我想你想做的是:

Dim mapOverlay = mapOverlays.Where(Function(x) x.Id = overlay.Name).Single()
mapOverlay.IsVisibile = False
如果将鼠标移到mapOverlay上,您将看到返回的类型实际上是GMapOverlay而不是(GMapOverlay的)IEnumerable,因为Single只返回一个元素。另一方面,Distinct可以返回多个元素,它只是过滤掉重复的值