6

有没有办法添加注释来记录 Dictionary 或 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

您可以将字典子类化,覆盖各种添加/删除方法来放置您自己的评论。另一种选择是创建您自己的集合类,该类包含一个内部字典并实现 IDictionary(如有必要)。除此之外,我不确定视觉工作室功能/技巧可以用来做你想做的事,但我不是这方面的专家。

于 2012-05-02T21:04:46.720 回答
1

一个比 Sergey 的解决方案需要更少开销但实现相同的解决方案是

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