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

本文关键字:列表 方法 字符串 表示 最简单 | 更新日期: 2023-09-27 18:17:26

我想创建几个简短的(有序的)字符串对列表,并在代码中有一个简洁的文字表示。有什么好办法吗?我能想到的最好的就是

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

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

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

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

n -by-2数组允许以下初始化语法:

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

在这种情况下,尺寸是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" }, };

任何类型,包括用户定义的类型,如果有一个(可访问的、非静态的)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

使用Tuple类-它很好地抽象了一对。比如:

new List<Tuple<string, string>>()
            {
                Tuple.Create("a", "b"),
                Tuple.Create("c", "d"),                    
            };

没有通用的OrderedDictionary,但有通用的SortedDictionary