Учитывая следующий класс vb.net:
Friend Class PairCollection(Of TKey, TValue)
Inherits List(Of KeyValuePair(Of TKey, TValue))
Public Overloads Sub Add(ByVal key As TKey, ByVal value As TValue)
Me.Add(New KeyValuePair(Of TKey, TValue)(key, value))
End Sub
Public Function FindByValue(ByVal value As TValue) As List(Of KeyValuePair(Of TKey, TValue))
Return Me.FindAll(Function(item As KeyValuePair(Of TKey, TValue)) (item.Value.Equals(value)))
End Function
End Class
Функция FindByValue возвращает одну KeyValuePair, которая соответствует значению. Однако реализация этого PairCollection может иметь ключ m: 1 к значению, поэтому я хочу вернуть все ключи (и только ключи), которые имеют это значение (их может быть больше одного).
Проблема не стала проще, потому что я новичок в лямбда-выражениях в vb.net и более знаком с C #. Я мог бы написать простую процедуру для перебора коллекции, но я чувствую, что есть лямбда и общий комбинированный подход.
Я думаю, что я пытаюсь сделать что-то вроде следующего:
Public Function FindByValue2(ByVal value As TValue) As List(Of TKey)
Return Me.FindAll(Function(item As list(of TKey) (item.Value.Equals(value)))
End Function
Связанное с тем, что я пытаюсь сделать, это здесь .