在c#中表示字符串对列表的最简单方法?

Rob*_*Rob 5 c# literals keyvaluepair

我想创建几个字符串对的短(有序)列表,并在代码中有一个简洁的文字表示.有一个很好的方法来做到这一点?我能想到的最好的是

     using Pairs = System.Collections.Specialized.OrderedDictionary;
     ...
            var z = new Pairs()
            {
                { "a", "b" },
                { "c", "d" }
            };
Run Code Online (Sandbox Code Playgroud)

但缺乏类型安全性有点可怕.似乎没有通用的有序字典.

还有哪些类具有文字初始化语法?是否可以为类定义自己的初始化语法?

aqu*_*aga 6

使用Tuple该类 - 它很好地抽象了一对.就像是:

new List<Tuple<string, string>>()
            {
                Tuple.Create("a", "b"),
                Tuple.Create("c", "d"),                    
            };
Run Code Online (Sandbox Code Playgroud)


Jep*_*sen 6

An n-by-2数组允许此初始化程序语法:

string[,] z = { { "a", "b" }, { "c", "d" }, { "z", "w" }, };
Run Code Online (Sandbox Code Playgroud)

在这种情况下,尺寸为3乘2.

如果您更喜欢数组数组,string[][]那么语法就会更加集中.某些行可能意外(或有意)具有与其他行不同的长度("锯齿状"阵列).Array.Sort在"外部"数组上使用一些IComparer<string[]>或更容易使用数组数组Comparison<string[]>.

否则,请使用SortedDictionary<string, string>SortedList<string, string>按照评论中的建议spender:

var z = new SortedDictionary<string, string> { { "a", "b" }, { "c", "d" }, { "z", "w" }, };
Run Code Online (Sandbox Code Playgroud)

任何类型(包括用户定义的类型)具有(可访问和非静态)Add方法,它接收两个字符串,将允许这种集合初始化程序.例如:

var z = new YourType { { "a", "b" }, { "c", "d" }, { "z", "w" }, };
Run Code Online (Sandbox Code Playgroud)

将大致相当于:

YourType z;
{
    var temp = new YourType();
    temp.Add("a", "b");
    temp.Add("c", "d");
    temp.Add("z", "w");
    z = temp;
}
// use variable z here
Run Code Online (Sandbox Code Playgroud)