Есть ли удобный способ передать аргументы функции для инициализации словаря (строки, строки) в 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)
имеет преимущество в том, что вы можете передавать больше типов, так как существует много классов, которые реализуют этот интерфейс.