6

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

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

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

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

4

3 回答 3

8

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

new List<Tuple<string, string>>()
            {
                Tuple.Create("a", "b"),
                Tuple.Create("c", "d"),                    
            };
于 2013-06-07T10:17:18.393 回答
8

一个n-by-2 数组允许这种初始化语法:

string[,] z = { { "a", "b" }, { "c", "d" }, { "z", "w" }, };

在这种情况下,尺寸为 3×2。

如果您更喜欢数组数组string[][],则语法会更笨拙。某些行可能意外(或有意)具有与其他行不同的长度(“锯齿状”数组)。数组数组可能更容易Array.Sort在“外部”数组上使用,使用 some IComparer<string[]>or进行排序Comparison<string[]>

否则,使用SortedDictionary<string, string>SortedList<string, string>已在评论中建议spender

var z = new SortedDictionary<string, string> { { "a", "b" }, { "c", "d" }, { "z", "w" }, };

任何类型,包括用户定义的类型,只要有一个(可访问的和非静态的)Add方法,它接受两个字符串,都将允许这种集合初始化器。例如:

var z = new YourType { { "a", "b" }, { "c", "d" }, { "z", "w" }, };

大致相当于:

YourType z;
{
    var temp = new YourType();
    temp.Add("a", "b");
    temp.Add("c", "d");
    temp.Add("z", "w");
    z = temp;
}
// use variable z here
于 2013-06-07T11:12:22.333 回答
0

没有通用的 OrderedDictionary,但有通用的SortedDictionary. 改用那个。

于 2013-06-07T10:17:43.720 回答