2
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

4 回答 4

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"]);
于 2013-07-29T12:24:56.640 回答
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

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

于 2013-07-29T12:26:08.147 回答
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
}

更可取和更安全。

于 2013-07-29T12:27:05.803 回答
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;
}

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

var find = myList.Where(m => m.Key == "theKey").Select(kvp => kvp.Value).SingleOrDefault();
于 2013-07-29T12:31:09.377 回答