C#如何检查字典中是否存在某个键并获取其对应的值

14
在我的桌面应用程序中,我从一个字典开始。我想要检查该字典是否包含某个键。如果字典有这个键,我想将其传递给一个方法。如果字典没有这个键,我想创建一个空列表并将其传递出去。我该如何做?
我收到了“给定的键在字典中不存在”的错误。我能否添加一个默认值,以便它永远不为空?
// myDic was declared as a Dictionary<string, List<string>    

// Here is how I call someFunction
string text = SomeFunction(stringValue1, stringValue2, myDic[field1.field2]);

// SomeFunction looks like this
string SomeFunction (string string1, string string2, List<string> ra) 
{  
     // method 
     return stringResult;
} 

2
什么是错误?它发生在哪里? - mason
1
你说的“它出错”是什么意思?你遇到了什么错误?我的第一个猜测是myDic[field1.field2]失败了,因为字典中没有对应于field1.field2的键。 - germi
如果 field1.field2 可能不在 myDic 中,则在使用它之前进行测试 - crashmstr
是的,完全正确。字典中没有数据。但我需要传递一个字典,因此我需要知道如何在其中获取一些默认数据,以便稍后进行测试。 - cd300
4个回答

16

根据评论更新。要传递一个可能存在或不存在的键,可以这样做(假设该值是List):

// assuming the method we are calling is defined like this:
// public String SomeFunction(string string1, String string2, List<String> ra)  

List<string> valueToPassOn;
if (_ra.ContainsKey(lc.Lc))
{
     valueToPassOn = _ra[lc.Lc]
}
else
{
     valueToPassOn = new List<string>(); 
}

string text = tooltip.SomeFunction(something1, something2, valueToPassOn); 

如果您想传递整个字典(就像问题最初的描述),无论该字典是否存在:

您有两种选择。一种是像这样创建字典:

if (myDic == null)
{
     // change var and var2 to the types of variable they should be, ex:
     myDic = new Dictionary<string, List<string>>();
}
string text = SomeFunction(stringValue1, stringValue2, myDic);

或者,更好的选择是在函数SomeFunction的声明中添加一个字典作为变量,并将其设置为默认参数。只需确保您的函数知道如果字典为空该怎么做即可。

string SomeFunction(string string1, string string2, Dictionary dictionary = null)
{
     // method here
}

12
您可以使用ContainsKey方法来检查键是否存在,如果返回false,则可以传递您想要的default值:
// replace default(string) with the value you want to pass
// if the key doesn't exist
var value = myDic.ContainsKey(field1.field2) ? myDic[field1.field2] : default(string);
string text = SomeFunction(stringValue1, stringValue2, value);

非常感谢Selman22。我想这就是我需要的。我会尝试一下。 - cd300
当我执行obj.ContainsKey(HaveRange)时,我会收到错误CS1061:'ClassName'不包含对'ContainsKey'的定义,并且没有可访问的扩展方法'ContainsKey'接受类型为'FilterInformation'的第一个参数(您是否缺少使用指令或程序集引用?) - Amrit

7

您需要做的是确保字典中实际包含给定的键。

如果需要通过键提取值,请使用TryGetValue方法:

string value;
if (myDict.TryGetValue(key, out value))
{
    // Key exists in the dictionary, do something with value.
}

1
这种方法比当前选择的答案更有效,因为键集合只被遍历一次。 - spicy.dll
使用C#7,您可以执行以下操作:myDict.TryGetValue(key, out string value)。 - Omar Tariq

2

使用以下代码片段之一检查字典是否为空并执行一些操作:

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

if (x.Any())
{
    //....
}

if (x.ContainsKey("my key"))
{

}

if (x.ContainsValue("my value"))
{

}

if (x.Count > 0)
{

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接