使用键值对作为参数

Wim*_*ink 11 c# shorthand

简单.如果我使用:

public void Add(params int[] values)
Run Code Online (Sandbox Code Playgroud)

然后我可以用它作为:

Add(1, 2, 3, 4);
Run Code Online (Sandbox Code Playgroud)

但现在我正在处理键值对!我有一个KeyValue类来将整数链接到字符串值.所以我开始:

public void Add(params KeyValue[] values)
Run Code Online (Sandbox Code Playgroud)

但我不能用这个:

Add(1, "A", 2, "B", 3, "C", 4, "D");
Run Code Online (Sandbox Code Playgroud)

相反,我被迫使用:

Add(new KeyValue(1, "A"), new KeyValue(2, "B"), new KeyValue(3, "C"), new KeyValue(4, "D"));
Run Code Online (Sandbox Code Playgroud)

Ewww ......我已经不喜欢这个......

所以,现在我使用不带params修饰符的Add函数,只是将一个预定义的数组传递给这个函数.因为它只是用于测试的快速初始化,所以我不需要太多麻烦需要这些额外的代码,尽管我想保持代码简单易读.我很想知道使用我不能使用的方法的技巧但是有没有办法在不使用"new KeyValue()"构造的情况下做到这一点?

Mar*_*ell 23

如果你接受了IDictionary<int,string>,你可能会使用(至少在C#3.0中):

Add(new Dictionary<int,string> {
     {1, "A"}, {2, "B"}, {3, "C"}, {4, "D"}
});
Run Code Online (Sandbox Code Playgroud)

有用吗?

示例Add:

static void Add(IDictionary<int, string> data) {
    foreach (var pair in data) {
        Console.WriteLine(pair.Key + " = " + pair.Value);
    }
}
Run Code Online (Sandbox Code Playgroud)