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)
但缺乏类型安全性有点可怕.似乎没有通用的有序字典.
还有哪些类具有文字初始化语法?是否可以为类定义自己的初始化语法?
使用Tuple该类 - 它很好地抽象了一对.就像是:
new List<Tuple<string, string>>()
{
Tuple.Create("a", "b"),
Tuple.Create("c", "d"),
};
Run Code Online (Sandbox Code Playgroud)
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)