gpt4 book ai didi

.net - 使用 LINQ 获取列表中匹配值的索引

转载 作者:行者123 更新时间:2023-12-04 14:46:15 25 4
gpt4 key购买 nike

我希望能够在 BindingList(Of T) 上运行 LINQ 查询,该查询返回列表对象成员等于特定值的索引。

说我有一个类小部件的简单对象列表:

Public Class widget
Public Property foo As Integer
Public Property bar As String
End Class
Dim widgetList As BindingList(Of widget)

我希望能够查询列表,如下所示:
Dim test As Integer = 5
Dim index = (From i In widgetList
Where i.foo = test
Select i.index).First

这样的索引包含第一个 listItem 的索引,其中 widgetList.Item(index).foo = 5。这样做的最佳方法是什么? (或者我什至应该使用 LINQ)

我已经看到了几种 C# 方法来做到这一点,但我对 C# 的了解不够充分,无法理解如何在 VB 中使用它们

最佳答案

由于 Select 有重载版本,因此可以通过使用 fluent 语法使用 LINQ 来实现。可让您获取项目索引的扩展方法。

试试这个方法:

Dim test As Integer = 5
Dim query = widgetList.Select(Function(o,i) New With { .Widget = o, .Index = i}) _
.FirstOrDefault(Function(item) item.Widget.Foo = test)
If query Is Nothing
Console.WriteLine("Item not found")
Else
Console.WriteLine("Item found at index {0}", query.Index)
End If

Select我按原样投影小部件,使用 o ,以及 i参数表示索引。接下来我用 FirstOrDefault带有要评估的谓词 Foo (您可以使用 Where 后跟 FirstOrDefault ,但这更短)。您应该使用 FirstOrDefault而不仅仅是 First如果没有找到任何项目; FirstOrDefault如果没有找到,将返回 null,而 First会抛出异常。这就是为什么下一步是检查结果并确保它不为空的原因。

关于.net - 使用 LINQ 获取列表中匹配值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18468536/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com