List<KeyValuePair<string,string>> 的语法更好?

Posted

技术标签:

【中文标题】List<KeyValuePair<string,string>> 的语法更好?【英文标题】:Nicer Syntax for List<KeyValuePair<string,string>>? 【发布时间】:2013-06-09 07:47:20 【问题描述】:

我有一个方法:

public void MyMethod(params KeyValuePair<string, string>[] properties);

我像这样调用:

MyMethod(
    new KeyValuePair("Name","Jack"), 
    new KeyValuePair("City", "New York"), 
    new KeyValuePair("Gender", "Male"), 
);

我更喜欢更漂亮的语法来调用该方法,类似于:

MyMethod("Name","Jack", "City","New York", "Gender","Male");

我最接近的方法是使用更改方法签名以接受字典作为方法参数并调用:

MyMethod(new Dictionary<string,string>()

    "Name", "Jack",
    "City", "New York",
    "Gender", "Male",
;

还有其他选择吗?

【问题讨论】:

Dictionary&lt;string, string&gt; 在我看来是最好的方法。 您在寻找比字典方法更简洁的方法吗? (我认为这比使用键/值对列表更干净,除非您希望能够使用重复的属性。) 我不喜欢 new Dictionary() 噪音...我想我可以将字典初始化移到方法调用之外。只是想知道我是否错过了什么...... 对我来说,这似乎是非常小的噪音。您可以使用更短的名称创建自己的类,该名称由 Dictionary&lt;string, string&gt; 支持,但 just 有一个 Add(string, string) 方法(然后是获取它们的方法),这将变成 new Dictionary&lt;string, string&gt;进入new Properties... 【参考方案1】:

您可以只接受字符串作为参数,然后像这样动态填充字典。

public void MyMethod(params string[] properties) 

    var pairs = new Dictionary<string, string>();

    for(int i = 0; i < properties.length - 1; i += 2) 
    
        pairs.Add(properties[i], properties[i + 1]);
    


MyMethod("Name", "Jack", "City", "New York", "Gender", "Male");

【讨论】:

你应该使用pairs.Add(properties[i], properties[i + 1])。否则你会得到一个 KeyNotFoundException。【参考方案2】:

另一种选择是使用二维数组

static void PrintArray(int[,] arr)

PrintArray(new int[,]   1, 2 ,  3, 4 ,  5, 6 ,  7, 8  );

但我更喜欢字典方法

【讨论】:

以上是关于List<KeyValuePair<string,string>> 的语法更好?的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 反序列化为 List<List<KeyValuePair>> 结果为空

List<KeyValuePair<string,string>> 的语法更好?

数据绑定到每个 KeyValuePair<string, List<T>> 中的最后一个条目

当我尝试使用 List<KeyValuePair<string, string>> 作为参数之一调用成员时,Type.InvokeMember 引发 MissingMethod

leetcode987

Dictionary的遍历总结