Как получить значение по ключу для 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, поэтому мне нужно работать в этой логике:
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
:
Я пытаюсь просмотреть список и сделать условие, если элемент с файлом ключа path существует или нет:
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.");
}
}
и проблема в том, что я не могу использовать item["path"] таким образом.. все, что я могу сделать, это item.Key & item.Value
List
вместоDictionary<string, string>
? Ваш вариант использования поиска по ключу выглядит так, как будто вам на самом деле не нужен список. - person Joe Enos   schedule 01.03.2018Dictionary<string, string>
, потому что я пытался его использовать, но он сказал, что есть еще элементы с одним и тем же ключом? я хочу иметь несколько элементов с одним и тем же ключом. если это возможно, моя проблема будет решена. - person Amr SubZero   schedule 01.03.2018KeyValuePair
не имеет никаких отношений между его элементами. Что вы можете сделать, так это создать класс и добавить к нему все свойства, которые вы хотите (путь, имя и т. д.), а затем вы можете создать список этого класса. Еще одна вещь, которую вы можете сделать, если речь идет только о путях и именах файлов, — это использоватьFileInfo
вместо создания собственного класса. - person 41686d6564   schedule 01.03.2018FileInfo
или создать свой собственный (в зависимости от того, какие свойства вам нужны). Если вы все еще не можете понять это, вы можете задать другой вопрос и объяснить свои фактические требования. - person 41686d6564   schedule 01.03.2018