Bạn có thể nhận được số KeyNotFoundException
khi gọi một từ điển bằng cách nào?Làm thế nào có thể ContainsKey (chuỗi khóa) ném một KeyNotFoundException trên một từ điển <string, string>?
Với chữ ký của phương pháp tôi đang kêu gọi:
IDictionary<string, string> RequestParams { get; }
Với cuộc gọi mà tôi đang làm:
Cho rằng tôi đang trở về một Dictionary<string, string>
như sau:
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;
}
}
Và tôi đã thực sự inpe cted rằng nó thực sự trả lại một instantiated và populated Dictionary<string, string>
Loại lớp là 'RequestParams' khi bạn nhận được ngoại lệ? Ngoài ra, bạn nên chỉnh sửa câu hỏi của mình để nói "Cho rằng tôi đang trả về một' IDictionary '" –
mason
@mason Tôi đã thêm phương thức triển khai. Mã được quản lý. –
'ContainsKey' không phải là ném ngoại lệ, tài sản của bạn getter là. Và đó là lý do tại sao bạn không bao giờ đặt mã đáng ngạc nhiên như thế này trong getters tài sản. Xây dựng một đối tượng mới mỗi khi nó được gọi là bất ngờ, đặc biệt nếu xây dựng nó có thể * thất bại * - getters không nên ném ngoại lệ. –