无法从列表<keyvaluepair> </keyvaluepair>中检索数据

时间:2013-07-29 12:23:20

标签: c#

List<KeyValuePair<String, String> myList = new List<KeyValuePair<String, String>>();

myList.Add(new KeyValuePair<String, SelectList>("theKey", "FIND THIS!"));

如何从"FIND THIS!"只知道myList来检索theKey?这种尝试无效。

String find = myList.Where(m => m.Key == "theKey");

来自其他语言,我总是有可能搜索大关联数组并检索这样的值:array[key] = value;

我怎样才能在C#中做到这一点?

4 个答案:

答案 0 :(得分:5)

使用List<KeyValuePair>代替Dictionary<string, SelectList>,然后您可以像访问:

一样访问它
array[key] = value;

您可以使用词典:

Dictionary<String, SelectList> dictionary= new Dictionary<String, SelectList>();
dictionary.Add("theKey", "FIND THIS!");

Console.WriteLine(dictionary["theKey"]);

答案 1 :(得分:1)

您可能正在寻找Dictionary<TKey, TValue>

Dictionary<string, string> myDict = new Dictionary<string, string>();
myDict.Add("theKey", "FIND THIS!");

现在您可以通过键找到该值:

string value = myDict["theKey"];

您可以这样更改值:

myDict["theKey"] = "new value";  // works even if the key doesn't exist, then it will be added

请注意,密钥必须是唯一的。

答案 2 :(得分:1)

字典怎么样?

IDictionary<String, String> foo = new Dictionary<String, String>();
foo.Add("hello","world");

现在你可以使用[]

foo["Hello"];

然而使用C#

string value;

if(foo.TryGetValue("Hello" , out value)){
   // now you have value
}

更加可取和安全。

答案 3 :(得分:1)

如其他答案中所述,您应该使用字典。

但是,您的行String find = myList.Where(m => m.Key == "theKey");无效的原因是myList.Where(m => m.Key == "theKey");将返回KeyValuePair。如果你只想要你可以尝试的价值:

String find = myList.Where(m => m.Key == "theKey").Single().Value;

或者如果您需要检查空值,那么可能:

var findKeyValue = myList.Where(m => m.Key == "theKey").SingleOrDefault();
if(findKeyValue != null)
{
    var find = findKeyValue.Value;
}

您还可以使用以下代码段(在这种情况下,您将拥有值或null)

var find = myList.Where(m => m.Key == "theKey").Select(kvp => kvp.Value).SingleOrDefault();