6

キー/値が何を意味するかを知るために辞書またはConcurrentDictionaryを文書化するためにコメントを追加する方法はありますか?

例えば:

Dictionary<guid, string> _users;

この例には、ユーザーの辞書があります。guidはUserIdであり、文字列はユーザ​​ー名ですが、単に「知っている」以外にわかりにくいです。

ドキュメントを追加して、アイテムを追加するときに、インテリセンスが開発者にキーと値に関するメモを伝える方法はありますか?

その上にコメントを追加できることはわかって<summary>います。そのメモはオブジェクト自体に配置されますが、追加、削除などの際に探していました。

4

4 に答える 4

4

最近、GOOSの本で、一般的なタイプ(コレクションなど)を独自のクラスにパッケージ化するという興味深いアイデアを見つけました。

.Net構造の言語ではなく、作業中の問題の言語を使用するようにしてください。ドメインとコード間の概念的なギャップを減らします。また、ジェネリックスを使用した型の受け渡しを制限するようにしてください。これは複製の一形態です。タイプするために抽出されるべきドメインの概念があることはヒントです。

率直に言って、私は一般的な汎用コレクションをパッケージ化するのにそれほど極端ではありませんが、型に独自の名前を付けることでさえ、読みやすく理解しやすいように一致させます。

public class UserNameDictionary : Dictionary<int, string>
{
}

とてもシンプルです。そして今、何を読むのが良いですか:

Dictionary<int, string> users = new Dictionary<int, string>();
UserNameDictionary users = new UserNameDictionary();

また、クラスにコメントをすばやく追加できます。

/// <summary>
/// Represents a dictionary of user names accessed by ids.
/// </summary>

これはAdd(int、string)のようなメソッドにコメントを追加しませんが、他の人がこのクラスを使用するとき、彼らはUserNameDictionary抽象的なDictionary<int, string>コンテキストではなく、コンテキストで考えます。

クラスをより便利にしたい場合は、基本クラスのメソッドを非表示にすることができます。

public new void Add(int userId, string userName)
{
    base.Add(userId, userName);
}

より複雑なユースケースでは、作業を内部辞書に委任するカスタムクラスを使用します。

于 2012-05-03T00:09:51.063 に答える
3

あなたの特定のケースでは、簡単な答えは「ボイラープレートコードの束なしではない」です。

メソッドは、型パラメーターの意味を文書化するように装飾できます。以下に、予想どおりIntellisenseでのパラメーターの意味を示します。

/// <summary>
/// Class to contain things
/// </summary>
/// <typeparam name="T">UserID</typeparam>
/// <typeparam name="TK">UserName</typeparam>
public class MyDictionary<T,TK> : Dictionary<T,TK>

これを使用して、仮想メソッドをオーバーライドし、同じように文書化できます。ただし、Dictionary <、>には基本的に仮想がないため、独自の呼び出しを作成してから「base」を呼び出す必要があります。(問題のある「新しい」を無視します)。

しかし、その時点で、次のことを実行する必要があります。

public class MyDictionary : Dictionary<string,string> 

そしてそれで終わります。

于 2012-05-02T23:11:10.063 に答える
2

辞書をサブクラス化し、さまざまなadd / removeメソッドをオーバーライドして、独自のコメントを付けることができます。もう1つのオプションは、内部ディクショナリをラップし、IDictionaryを実装する独自のコレクションクラスを作成することです(必要な場合)。それを超えて、私はあなたが望むことをするためにどのビジュアルスタジオ機能/トリックが利用可能であるかわかりませんが、私はその点で専門家ではありません。

于 2012-05-02T21:04:46.720 に答える
1

Sergeyのソリューションよりも必要なオーバーヘッドが少ないが、同じことを達成するソリューションは、

using UserNameDictionary = Dictionary<int, string>;
于 2015-07-17T20:48:17.560 に答える