调用词典时如何获得KeyNotFoundException
?
鉴于我正在调用的方法的签名:
IDictionary<string, string> RequestParams { get; }
鉴于我正在打电话:
鉴于我正在返回Dictionary<string, string>
,如下所示:
public IDictionary<string, string> RequestParams
{
get
{
NameValueCollection nvc = HttpContext.Request.Params;
#region Collect the Request Params
Dictionary<string, string> dict = new Dictionary<string, string>();
nvc.AllKeys.ForEach(s => dict[s] = nvc[s]);
#endregion
#region Collect the Route Data Present in the Url
RouteData.Values.ForEach(pair =>
{
string param = (pair.Value ?? "").ToString();
if (!String.IsNullOrEmpty(param) && Uri.AbsolutePath.Contains(param))
dict[pair.Key] = param;
});
#endregion
return dict;
}
}
我实际上已经检查过它确实会返回一个实例化并填充Dictionary<string, string>
答案 0 :(得分:7)
注意,不是Dictionary
,而是IDictionary
。底层实现可以做任何想做的事情,甚至关闭你的计算机。
使用Dictionary
时,ContainsKey
不会抛出任何异常(除了键空例外)。
你正在使用的IDictionary
的具体实现可能会抛出KeyNotFoundException
,但这仍然很奇怪 - 虽然,我看到了很多奇怪的东西,所以不要惊慌:! - )
可能的原因:
Dictionary
,请确保您拥有名称空间System.Collections.Generic
答案 1 :(得分:1)
它无法抛出异常。
使用getter查看文件的using语句。你看到了吗?
using System.Collections.Generic;
或是它:
using MyAmazingLib.BetterThanMS.Collections;