一对等于键/值的对列表?

mar*_*zzz 1 c# linq data-structures

我需要一个Pair列表,"string","string".

试过:

Dictionary<string, string> Categories= new Dictionary<string, string>();
Run Code Online (Sandbox Code Playgroud)

但不能添加"700","2"和"700","3".我需要一个配对,我可以随时添加所有东西.像一个可以包含N Vector(字符串,字符串)的Vector.我需要哪种结构?很快,因为我需要在LINQ中对它们进行比较,之后:

myStructs = from MyObject s in MyObjects
               join c in Categories on s.IDCategory.UniqueID equals c.Key
               join d in Categories on s.Stars equals d.Value
               select s;
Run Code Online (Sandbox Code Playgroud)

Ada*_*rth 9

尝试List<Tuple<string, string>>,或为了提高可读性,只需创建一个新类型.

如果你需要它在linq期间有意义,你可以将元组转换为匿名类型(let在这里使用)给类型一些合理的属性名称:

var items = new List<Tuple<string, string>>
    {
        new Tuple<string, string>("Adam", "1"), 
        new Tuple<string, string>("Adam", "2")
    };

var names = from i in items
            let person = new { Name = i.Item1, Number = i.Item2 }
            select person.Name;
Run Code Online (Sandbox Code Playgroud)

在linq查询期间使其更具可读性.

它的类型使用了很多,我建议创建自己的类型,使用更好的属性名称,以便在Servy的答案中清晰.从长远来看,Tuple<string, int, bool>少了很多比明显:

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool LikesCake { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

元组相等性基于所有属性与相同类型元组的实例的相等性.例如,new Tuple("Adam", "1").Equals(new Tuple("Adam", "1"))将是真的.

列表也不会停止重复的项目.如果您需要在所有属性中强制执行唯一性,那么HashSet<Tuple<string, string>>您就需要.