LinqToObject查询无法转换类型的对象

时间:2011-07-29 20:56:46

标签: 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__7a`1 [GMap.NET.WindowsForms.GMapOverlay]'来输入   'GMap.NET.WindowsForms.GMapOverlay'。

1 个答案:

答案 0 :(得分:2)

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

我认为你要做的是:

Dim mapOverlay = mapOverlays.Where(Function(x) x.Id = overlay.Name).Single()
mapOverlay.IsVisibile = False

如果将鼠标移到mapOverlay上,您将看到返回的类型实际上是GMapOverlay而不是IEnumerable(GMapOverlay),因为Single只返回一个元素。另一方面,区别可以返回多个元素,它只是过滤掉重复的值。