VB.net Словарь — получение всех значений из словаря равно 1

#vb.net #dictionary

#vb.net #словарь

Вопрос:

Я пытаюсь создать словарь обменных курсов в VB.net . Я хочу получить словарь, который при вводе названия валюты вернет массив обменных курсов за 15 дней. Например, вызов ‘USD’ в словаре вернет массив курсов USD / THB. Моя проблема, все значения в моем словаре равны 1.

Вот мой код. Хотя значения в моем ArrayTemp (мой массив перед помещением в словарь) не равны 1, все значения в словаре равны 1.

 MarketDataEndRow = .Range("A5").End(XlDirection.xlDown).Row
ReDim ArrayTemp(MarketDataEndRow = 6)
i = oFunction.Match("FX Spot", .Rows(5), 0)
While (.Cells(5,i).Value().ToString = "FX Spot" Or IsNothing(.Cells(5, i).value().ToString)) And Not IsNothing( .Cells(4, i).value().ToString)
    For K = 6 to MarketDataEndRow
        ArrayTemp(K - 6) = .Cells(k, i).value
    Next K
    dictFxSpot.Add(.Cells(4, i).Value, ArrayTemp)
End While

  

Комментарии:

1. Здесь недостаточно информации, чтобы мы могли ответить. Каковы исходные данные? Нам нужен образец, а также образец того, что вы ожидаете увидеть.

2. Также: синтаксис для вашего ReDim неверен. MarketDataEndRow = 6 возвращает a Boolean , но ReDim ArrayTemp() ожидает одно или несколько числовых значений. Смотрите официальную документацию .

3. Также: при выполнении логических сравнений, как вы здесь, правильный синтаксис заключается в использовании OrElse и AndAlso вместо Or и And . Or и And выполняют побитовые сравнения и могут привести к неожиданным результатам. Вы можете найти более подробную информацию здесь .

4. Кроме того, я бы рекомендовал не использовать IsNothing функцию, которая предназначена только для совместимости, предпочтительнее использовать Is (или IsNot ) оператор сравнения, т. Е. .Cells(5, i).value().ToString Is Nothing . При этом маловероятно, что вызов ToString вернет нулевую строку, поэтому вы можете вместо этого использовать что-то вроде String.IsNullOrEmpty .

5. Ваша проблема, вероятно, заключается в том, что массивы являются ссылочным типом. Ваш написанный код поместит один и тот же массив в каждую запись в словаре. Вам нужно поместить объявление вашего массива внутри цикла, чтобы для каждой записи словаря создавался новый массив.