Хеш-таблица / Ассоциативный массив в VBA

Лямбда-выражение может или быть преобразовано в тип делегата или дерево выражений - но оно должно знать который тип делегата. Просто знание подписи не достаточно. Например, предположите, что я имею:

public delegate void Action1();
public delegate void Action2();

...

Delegate x = () => Console.WriteLine("hi");

, Чем Вы ожидали бы, что конкретный тип объекта, упомянутого x, будет? Да, компилятор мог генерировать новый тип делегата с соответствующей подписью, но это редко полезно, и Вы заканчиваете с меньшей возможностью для проверки ошибок.

, Если Вы хотите помочь звонить Control.Invoke с Action, самая легкая вещь сделать, добавляет дополнительный метод для Управления:

public static void Invoke(this Control control, Action action)
{
    control.Invoke((Delegate) action);
}
87
задан ashleedawg 2 April 2018 в 18:07
поделиться

3 ответа

Я думаю, вы ищете объект Dictionary, который можно найти в библиотеке Microsoft Scripting Runtime. (Добавьте ссылку на свой проект из меню "Инструменты ... Ссылки" в VBE.)

Он практически работает с любым простым значением, которое может соответствовать варианту (ключи не могут быть массивами, и попытки сделать их объектами бессмысленны. См. Комментарий от @Nile ниже.):

Dim d As dictionary
Set d = New dictionary

d("x") = 42
d(42) = "forty-two"
d(CVErr(xlErrValue)) = "Excel #VALUE!"
Set d(101) = New Collection

Вы также можете использовать объект VBA Collection, если вам проще, и вам нужны только строковые ключи.

Я не знаю, есть ли на самом деле хеши для чего-либо, поэтому вы можете хотите копать дальше, если вам нужна производительность, подобная хэш-таблице. (EDIT: Scripting.Dictionary действительно использует хэш-таблицу внутри.)

108
ответ дан 24 November 2019 в 07:50
поделиться

Попробуйте использовать объект словаря или объект коллекции.

http://visualbasic.ittoolbox.com/documents/dictionary-object-vs -collection-object-12196

7
ответ дан 24 November 2019 в 07:50
поделиться

Я использовал класс HashTable Франческо Балены несколько раз в прошлом, когда Коллекция или Словарь не подходили идеально, и мне просто требовалась HashTable.

8
ответ дан 24 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: