2012-05-02 46 views
4

有没有方法可以添加注释来记录Dictionary或ConcurrentDictionary以知道键/值的含义?词典 - 添加注释以驱动intellisense

例如:

Dictionary<guid, string> _users; 

这个例子有用户的字典。 guid是UserId,字符串是用户名,但很难说除了“知道”以外。

有没有办法添加文档,以便在添加项目时,智能感知会告诉开发人员关于&键值的注释?

我知道我可以添加在其上方<summary>注释,它把该说明的对象本身,而是一直在寻找的时候添加,删除等

+0

真的听起来像矫枉过正我一个解决方案... –

回答

3

最近,在全球海洋观测系统本书中,我发现了自己的类包装常见的类型(如集合)的有趣的想法:

尝试使用问题的语言你工作,而不是语言。网络构造。它减少了域和代码之间的概念差距。还尝试限制 传递类型与泛型。这是 重复的一种形式。这暗示有一个领域概念,应该是提取类型为 。

坦率地说,我不是在包装常见泛型集合所以极值,但即使是给人一种类型的自己的名字使它更容易匹配阅读和理解:

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> 

这不会添加注释方法,如添加(整型,字符串),但其他时候人们会使用这个类,他们会在UserNameDictionary的背景下思考,而不是在抽象的Dictionary<int, string>上下文中。

如果你想使你的类更加得心应手,你可以隐藏基类的方法:

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

对于更复杂的使用情况我会使用自定义类的代表一道,内部字典去。

1

你可以继承了字典,覆盖各种附加/删除方法来把你自己的意见。另一种选择是创建自己的集合类,它包装内部字典并实现IDictionary(如有必要)。除此之外,我不确定什么视觉工作室功能/技巧可以做你想做的,但我不是那方面的专家。

2

对于您的具体情况,简短的答案是'没有一堆样板代码'。

可以修饰方法以记录类型参数的含义。以下将按照您的预期显示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> 

您可以使用它覆盖虚拟方法并将它们记录在一起。然而,字典<,>基本上没有虚拟,所以你将被要求创建自己的电话,然后调用'基地'。 (忽略有问题的'新')。

但随后在这一点上,你应该继续使用:

public class MyDictionary : Dictionary<string,string> 

,并用它做。

0

需要更少的开销比Sergey的解决方案,但达到同样会

using UserNameDictionary = Dictionary<int, string>;