Использование ключа документа в словаре - PullRequest
1 голос
/ 20 апреля 2010

Как я могу документировать использование ключа в Словаре, чтобы он отображался в Visual Studio при кодировании с использованием этого объекта?

Я ищу что-то вроде:

/// <param name="SpecialName">That Special Name</param>
public Dictionary<string,string> bar;

ТакДо сих пор лучшей попыткой было написать мой собственный класс:

public class SpecialNameDictionary : IDictionary<string, string>
{
    private Dictionary<string, string> data = new Dictionary<string, string>();

    /// <param name="specialName">That Special Name</param>
    public string this[string specialName]
    {
        get
        {
            return data[specialName];
        }
    }
}

Но он добавляет много кода, который ничего не делает.Кроме того, я должен перепечатывать каждый метод Dictionary, чтобы он компилировался.

Есть ли лучший способ достичь вышеуказанного?

Ответы [ 3 ]

1 голос
/ 20 апреля 2010

Вы можете определить словарь так:

public class SpecialNameDictionary : Dictionary<string, string>
{
    /// <param name="specialName">That Special Name</param>
    public new string this[string specialName]
    {
        get
        {
            return base[specialName];
        }
    }
}

Вместо производного от IDictionary производного от Dictionary и создания новой реализации индексатора.

1 голос
/ 20 апреля 2010

Документируйте поле следующим образом:

/// <summary>
/// A map from the special name to the frongulator.
/// </summary>
public Dictionary<string,string> bar;

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

Вы не получите IntelliSense на самом индексаторе, но любое использование bar должно дать разумную ясность.

Три другие альтернативы:

  • Используйте типы, которые делают использование более понятным (строка может быть чем угодно, но FrongulatorSpecialName более понятна)
  • Сделать имя поля / свойства более понятным
  • Скрыть словарь, но добавить метод, такой как «GetFrongulatorBySpecialName»
0 голосов
/ 20 апреля 2010

Вы можете наследовать напрямую от Dictionary<> вместо IDictionary<>, таким образом, вам нужно всего лишь заново внедрить индексатор.

...