#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
возвращает aBoolean
, ноReDim ArrayTemp()
ожидает одно или несколько числовых значений. Смотрите официальную документацию .3. Также: при выполнении логических сравнений, как вы здесь, правильный синтаксис заключается в использовании
OrElse
иAndAlso
вместоOr
иAnd
.Or
иAnd
выполняют побитовые сравнения и могут привести к неожиданным результатам. Вы можете найти более подробную информацию здесь .4. Кроме того, я бы рекомендовал не использовать
IsNothing
функцию, которая предназначена только для совместимости, предпочтительнее использоватьIs
(илиIsNot
) оператор сравнения, т. Е..Cells(5, i).value().ToString Is Nothing
. При этом маловероятно, что вызовToString
вернет нулевую строку, поэтому вы можете вместо этого использовать что-то вродеString.IsNullOrEmpty
.5. Ваша проблема, вероятно, заключается в том, что массивы являются ссылочным типом. Ваш написанный код поместит один и тот же массив в каждую запись в словаре. Вам нужно поместить объявление вашего массива внутри цикла, чтобы для каждой записи словаря создавался новый массив.