У меня есть функция, которая должна рекурсивно циклически проходить по элементу управления и его дочерним элементам и возвращать любые значения формы в этом элементе управления (текстовые поля, флажки, радиокнопки) и выводить их в виде словаря, где ключ является идентификатором элемента управления.а значением является текст или значение элемента управления.
Однако я сталкиваюсь с проблемой в строке, где происходит рекурсия, она выдает мне следующую ошибку:
Unable to cast object of type '<UnionIterator>d__88
1 [System.Collections.Generic.KeyValuePair 2[System.String,System.String]]' to type 'System.Collections.Generic.Dictionary
2 [System.String, System.String] '. `
Код:
Public Shared Function getFormValuesInsideControl(ByVal control As Control) As Dictionary(Of String, String)
Dim formValues As New Dictionary(Of String, String)
If control IsNot Nothing Then
If control.HasControls = True Then
For Each childControl As Control In control.Controls
formValues = formValues.Union(getFormValuesInsideControl(childControl)) 'error happens here'
Next
Else
Select Case TypeName(control)
Case "TextBox"
Dim textbox As TextBox = control
formValues.Add(formatControlName(textbox.ID), textbox.Text)
Case "CheckBox"
Dim checkbox As CheckBox = control
If checkbox.Checked = True Then
formValues.Add(formatControlName(checkbox.ID), "Yes")
End If
Case "RadioButton"
Dim radioButton As RadioButton = control
If radioButton.Checked = True Then
formValues.Add(formatControlName(radioButton.ID), "Yes")
End If
End Select
End If
End If
Return formValues
End Function
Я вижу, чтопроисходит, но я не уверен, почему или как это исправить.
Как я могу объединить эти словари в этой строке?Я видел примеры этого в LINQ, но не думаю, что смогу сделать это здесь из-за рекурсивного аспекта.