c#List <keyvaluepair>按键或索引获取值

时间:2018-03-01 01:35:17

标签: c# linq keyvaluepair

如何通过获取以获取keyKeyValuePair

我有List<KeyValuePair<string, string>>

var dataList = new List<KeyValuePair<string, string>>();

// Adding data to the list
dataList.Add(new KeyValuePair<String, String>("name", "foo"));
dataList.Add(new KeyValuePair<String, String>("name", "bar"));
dataList.Add(new KeyValuePair<String, String>("age", "24"));

为该列表创建循环:

foreach (var item in dataList) {
    string key = item.Key;
    string value = item.Value;
}

我想做的是以某种方式获取string name = item["name"].Value

foreach (var item in dataList) {
    // Print the value of the key "name" only
    Console.WriteLine(item["name"].Value);

    // Print the value of the key "age" only
    Console.WriteLine(item["age"].Value);
}

或者可以通过索引获取,例如Console.WriteLine(item[0].Value)

我怎么能实现这个目标?

注意: 我只需要使用一个foreach,不要为每个键使用分离的foreach。

编辑1 ,如果我使用if(item.Key == "name") { // do stuff },我将无法使用其中的其他键,因此我需要使用此逻辑:

if(item.Key == "name") {
    // Print out another key
    Console.WriteLine(item["age"].Value)

    // and that will not work because the if statment forced to be the key "name" only
}

编辑2 我尝试使用词典并向其添加数据,如:

dataList.Add("name", "john");
dataList.Add("name", "doe");
dataList.Add("age", "24");

它说An item with the same key has already been added.我想是因为我添加了多个具有相同键"name"的项目,我需要这样做。

编辑3 我想要实现的目标instead of how i try to do it

我试图遍历列表并在条目路径文件中存在或不符合条件时生成条件:

if(File.Exists(item["path"]) { Console.WriteLine(item["name"]) }

// More Explained

foreach (var item in dataList) {
    if (File.Exists(//the key path here//)) {
        MessageBox.Show("File //The key name here// exists.");
    }else {
        MessageBox.Show("File //The key name here// was not found.");
    }
}

以及我无法使用项目[&#34;路径&#34;]那样的问题..我所能做的就是item.Key&amp; item.Value

1 个答案:

答案 0 :(得分:0)

您只能通过所需的键运行foreach查询:

foreach ( var item in dataList.Where( i => i.Key == "name" ) )
{
    //use name items
}

这使用LINQ仅包含KeyValuePairs Key"name"的{​​{1}}。您必须在源代码文件的顶部添加using System.Linq才能使其正常工作。