#vb.net #dictionary
#vb.net #словарь
Вопрос:
Возможно, я неправильно использую термин «Массив словарей», поэтому, пожалуйста, сообщите мне правильную терминологию, если это так. В моем приведенном ниже коде я имею в виду массив словарей Dim PdfIndividual(individualCount)
.
По сути, я пытаюсь заставить лямбда-функцию возвращать счетчик после того, как она перебирает мой массив словарей и находит значение, для которого я пытаюсь получить счетчик.
Я ограничен рамками, в которых в конечном итоге будет выполняться этот код, поэтому я в первую очередь использую лямбда-функцию. Поэтому, хотя я уверен, что представленный мной код может быть не идеальным, мне действительно просто интересно понять, почему возникает ошибка, а не просто заставить ее работать.
Dim relationshipTypeCount As Func(Of Dictionary(Of String, String)(), String, Integer) =
Function(PdfIndividualArray, relationshipType)
Dim dictValue As String = ""
Dim relTypeCountResult As Integer = 0
For Each pdfIndDict As Dictionary(Of String, String) In PdfIndividualArray
pdfIndDict.TryGetValue("RelationshipType", dictValue)
If dictValue = relationshipType Then
relTypeCountResult = 1
End If
Next
Return relTypeCountResult
End Function
Dim individualCount As Integer = 5
Dim relType As String = ""
Dim PdfIndividual(individualCount) As Dictionary(Of String, String)
For i As Integer = 0 To individualCount
If i = 0 Then
relType = "primary"
ElseIf i <= 3 Then
relType = "secondary"
ElseIf i > 3 Then
relType = "guest"
End If
PdfIndividual(i) = New Dictionary(Of String, String)
PdfIndividual(i).Add("RelationshipType", relType)
Dim relCount As Integer = relCount = relationshipTypeCount(PdfIndividual, relType)
Next
Ошибка возникает в элементе словаря в For …Каждая из моих лямбда-функций relationshipTypeCount .
Текст ошибки:
System.NullReferenceException: «Ссылка на объект не установлена для экземпляра объекта».
pdfIndDict ничего не значил.
Комментарии:
1. Отладьте свой код.
2. Спасибо за комментарий @jmcilhinney. Хотя я провел некоторую отладку, чтобы добраться до того места, где я опубликовал свой первоначальный вопрос, я понимаю, что не прошел через это должным образом. Еще один взгляд, проходящий через лямбда-функцию, и я думаю, что вижу, в чем проблема.
Ответ №1:
В зависимости от вашей цели.ЧИСТАЯ версия, вы можете использовать следующую нулевую условную форму, которая является более краткой:
For Each pdfIndDict As Dictionary(Of String, String) In PdfIndividualArray
pdfIndDict?.TryGetValue("RelationshipType", dictValue)
If dictValue = relationshipType Then relTypeCountResult = 1
Next pdfIndDict
Кстати, вы также можете использовать следующую форму проверки null:
If pdfIndDict IsNot Nothing Then ...
Ответ №2:
После дальнейшей отладки я понял, что моя проблема заключалась в том, что я перебирал «массив», в котором было 6 элементов, однако 5 элементов были ничем во время первого вызова лямбда-функции. Поэтому мне просто нужно было добавить проверку того, что элемент словаря, с которым я работал, не был ничем.
For Each pdfIndDict As Dictionary(Of String, String) In PdfIndividualArray
If Not IsNothing(pdfIndDict) Then
pdfIndDict.TryGetValue("RelationshipType", dictValue)
If dictValue = relationshipType Then
relTypeCountResult = 1
End If
End If
Next