在我的桌面C#
应用程序中,我从字典开始。我希望能够检查这个字典中的密钥。如果字典有这个键,我想把它传递给一个方法。如果字典没有这个键,我想创建一个空白列表,然后将其传递给它。我怎么能这样做?
我收到错误“字典中没有给定密钥”。我可以添加默认值,因此它永远不会为空吗?
// 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;
}
答案 0 :(得分:8)
根据评论更新。要传递一个可能存在或不存在的密钥,您可以执行此操作(假设值为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
}
答案 1 :(得分:8)
您可以使用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);
答案 2 :(得分:2)
使用以下某个代码段检查字典是否为空并执行某些操作:
var x = new Dictionary<string, string>();
if (x.Any())
{
//....
}
if (x.ContainsKey("my key"))
{
}
if (x.ContainsValue("my value"))
{
}
if (x.Count > 0)
{
}
答案 3 :(得分:2)
您需要做的是确保字典实际上包含字典中的给定键。
如果您需要按键提取值,请使用TryGetValue
方法:
string value;
if (myDict.TryGetValue(key, out value))
{
// Key exists in the dictionary, do something with value.
}