Scripting.Dictionary с Option Script запрещает позднее связывание - PullRequest
0 голосов
/ 05 декабря 2018

Я перенес код VB6 в Vb.Net и получил Option strict On.

Теперь .Keys(intIndex) выдает исключение Option Strict On disallows late binding.Ниже приведен код:

Public Function PopulateList(ByRef dicListValues As Scripting.Dictionary)
    Dim strKey As String
    With dicListValues
        For intIndex = 0 To .Count - 1
            strKey = .Keys(intIndex)
        Next
    End With

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

вот ответ, если вы хотите использовать Scripting.Dictionary для работы, когда опция строгого параметра включена.

    Dim dict As New Scripting.Dictionary '= New Scripting.DictionaryClass()
    Dim str As String
    dict.Add("1", 10)
    dict.Add(2, "20")
    dict.Add(Math.PI, "Test")

    dict.Add(New Text.StringBuilder(), "builder")
    For i = 0 To dict.Count - 1
        str = CType(DirectCast(dict.Keys, Object())(i), String)
    Next
0 голосов
/ 05 декабря 2018

Вот почему вы не хотите использовать Scripting.Dictionary

Dim dict As Scripting.Dictionary = New Scripting.DictionaryClass()
dict.Add("1", 1)
dict.Add(2, "2")
dict.Add(Math.PI, "a")
dict.Add(New Text.StringBuilder(), "builder")
For i = 0 To dict.Count - 1
    Console.WriteLine("Key: {0}, Value: {1}", dict.Keys(i), dict(dict.Keys(i)))
Next

Вы можете видеть, что dict.Keys(i) и dict(dict.Keys(i)) (ключ и значение словаря) могут быть любого типа, которыйa Object (каждого типа).

Хорошо, предположим, что у вас есть все строки.

Dim strKey As String
With dicListValues
    For intIndex = 0 To .Count - 1
        strKey = .Keys(intIndex).ToString()
    Next
End With

(Вы можете управлять им, только добавляя строки, но это не очевидно, если вы не прокомментируете хорошо).

Лучшим решением было бы заменить ваш Scripting.Dictionary на Dictionary (Of TKey, TValue) во всем вашем проекте.Вы можете преобразовать в них свой Scripting.Dictionary с помощью ссылки, которую я комментировал ранее Преобразовать VB6 Scripting.Dictionary в общий словарь .NET

...