Есть ли удобный способ передать аргументы функции для инициализации словаря (строки, строки) в Vb.net

Мы можем сделать это в vb.net:

Dim d= new Dictionary(of string, string) from {{"a","valA"},{"b","valB"}}

Пожалуйста, как мы можем сделать следующее возможным для удобства:

public sub Setup(args)
   Dim d= new Dictionary(of string, string) from args
end sub

Благодарю.

1 ответ

Решение

Нет, вы не можете инициализировать словарь с синтаксисом инициализатора коллекции из переменной или параметра. Это просто синтаксический сахар, который съедает компилятор, если вы назначите его так, как показано в первом фрагменте.

Тем не менее, вы можете передать IDictionary(Of String, String) и используйте это для конструктора словаря:

Public sub Setup(dict As IDictionary(Of String, String))
   Dim d = new Dictionary(Of String, String)( dict )
End Sub

Или вы можете передать IEnumerable(Of KeyValuePair(Of String, String)) и использовать это для args.ToDictionary(Function(kv) kv):

Public sub Setup(keyVals As IEnumerable(Of KeyValuePair(Of String, String)))
   Dim d = args.ToDictionary(Function(kv) kv)
End Sub

Первый подход более эффективен, а второй более общий. позволяющий IDictionary(Of TKey, TValue) имеет преимущество в том, что вы можете передавать больше типов, так как существует много классов, которые реализуют этот интерфейс.

Другие вопросы по тегам