没有KEY约束的字典或键值对

时间:2011-05-25 19:17:27

标签: .net generics dictionary key-value

我需要返回两个值的列表。 我尝试过Dictionary但是第一个参数是关键,在我的例子中它会重复。 我的列表需要返回这样的内容:

经理 - John Zambers

开发人员 - 保罗迈尔斯

开发人员 - John Zambers

测试员 - 玛丽玛丽

等等......等等......

我不想创建自己的类来表示此列表。 Dot.Net有内置的Type代表吗?有些想法如List()?

提前致谢。

4 个答案:

答案 0 :(得分:6)

您可以使用System.Tuple<T1, T2>类,例如:

List<Tuple<String, String>> people = new List<Tuple<String, String>>();
people.Add(Tuple.Create("Manager", "John Zambers"));
// etc.

但是,创建自己的课程有什么问题?它们几乎可以自我记录,特别是在这样的简单情况下(例如,显而易见的是Name字段中的内容)。例如:

public class Person
{
   public string Role { get; set; }
   public string Name { get; set; }
}

旁注:我不知道您的应用程序域或您拥有的所有可能的角色/标题,但如果您根据此值进行任何类型的处理,它看起来像是一个使用{{{{ 3}}而不是。如,

public enum Roles
{
    Manager,
    Developer,
    Tester
}

答案 1 :(得分:1)

这个怎么样?

Dictionary<string, List<string>> role_names = new Dictionary<string, List<string>>();
List<string> lst;

role_names.Add("Manager", lst = new List<string>());
lst.Add("John Zambers");

role_names.Add("Developer", lst = new List<string>());
lst.Add("Paul Myers");
lst.Add("John Zambers");

role_names.Add("Tester", lst = new List<string>());
lst.Add("Mary Marie");

答案 2 :(得分:1)

试试这个:

List<KeyValuePair<string,string>> list = new List<KeyValuePair<string,string>>();
list.Add(new KeyValuePair<string, string>("Manager", "John"));
list.Add(new KeyValuePair<string, string>("Manager", "John"));
Console.WriteLine(list[0].Key);

你也可以使用类似System.Web.UI.Pair的东西(这不是通用的,但有时非常方便)。

但是,只有当第一件事情是第一件事并且第二件事是名字并不重要时,你才应该使用它。如果你想把它当作另一对东西 - 使用KeyValuePair或Pair。但如果它是位置和名称对的列表,那么为它制作一个特殊类型可能是个好主意。

答案 3 :(得分:0)

.NET 确实有类这样的东西,但你不能直接使用它。它是Lookup,由LINQ中的ToLookup方法返回。

如果你可以找到一种方法来使用ToLookup来获取你的数据来源,它会让你的生活变得更轻松。

如果您愿意,可以随时使用my implementation of Lookup中的Edulinq。基本上两个实现都是从程序集本身外部不可变的,但是如果你想要的话,你可以改变我的变量:)