Как создать пустой словарь для необязательного аргумента в VB.NET - PullRequest
7 голосов
/ 09 апреля 2009

По сути, у меня есть функция, которая имеет необязательный аргумент словаря. Поскольку это необязательно, ему нужно значение по умолчанию, и я бы хотел установить его в пустой словарь вместо Nothing. Как мне это сделать?

В Java я бы просто сделал это:

Collections.<K,V>emptyMap()

Как мне сделать эквивалент в VB.NET?

(я использую .NET 3.5).

Ответы [ 3 ]

9 голосов
/ 09 апреля 2009

В .NET нет предварительно консервированного пустого словаря. Чтобы создать пустой словарь, просто перейдите Новый словарь ().

Однако я полагаю, что вам не разрешат использовать это значение по умолчанию для необязательного аргумента, поскольку его нельзя вычислить во время компиляции и поместить в DefaultValueAttribute. Вместо этого вам потребуется перегрузить функцию: одна перегрузка принимает аргумент словаря, а другая - нет. Последний просто создаст пустой словарь, как указано выше, и вызовет первую перегрузку.

5 голосов
/ 09 апреля 2009

Нет способа указать пустой словарь в качестве значения по умолчанию для параметра в VB.Net. VB.Net поддерживает только те значения, которые могут быть закодированы в MetaData, и создание нового экземпляра словаря не является одним из них.

Один из вариантов, который у вас есть, - это необязательное значение по умолчанию Nothing. В случае Nothing создайте пустой словарь. Например.

Public Sub SomeMethod(Optional ByVal map as Dictionary(Of Key,Value) = Nothing)
  if map Is Nothing Then
    map = new Dictionary(Of Key,Value)
  ENd If 
  ...
End Sub
2 голосов
/ 10 февраля 2016

В зависимости от цели, это может быть несколько более ресурсосберегающим (то есть с точки зрения памяти), если подразумеваемый пустой словарь создается с емкостью 0:

var empty = new Dictionary<string, string>(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...