SO。 已經3個小時,我試圖找出什麼可能是拋出The given key was not present in the dictionary.
錯誤的問題,但不幸的是,通過許多問題和博客帖子並沒有太多的幫助。如何解決給定的鍵不存在於字典錯誤?
我有一個簡單的Facebook批處理參數字典,當我遍歷結果時會拋出錯誤The given key was not present in the dictionary
。
這裏就是引發異常的代碼:
foreach (FacebookPermissionModel permissionResult in
result.SelectMany(x => x.data).Where(y => y.status == "granted"))
{
RequiredPermissions[permissionResult.permission].granted = true; // the error comes from here.
}
下面是完整的代碼:
protected List<FacebookPermissionRequest> CheckPermissions(Dictionary<string, FacebookPermissionRequest> RequiredPermissions)
{
var access_token = HttpContext.Items["access_token"].ToString();
if (!string.IsNullOrEmpty(access_token))
{
var appsecret_proof = access_token.GenerateAppSecretProof();
var fb = new FacebookClient(access_token);
IEnumerable<FacebookPermissionRequest> MissingPermissions =
new List<FacebookPermissionRequest>(); //initialize to an empty list
if (MissingPermissions != null)
{
//create an array of Facebook Batch Parameters based on list of RequiredPermission
FacebookBatchParameter[] fbBatchParameters =
new FacebookBatchParameter[RequiredPermissions.Values.Count()];
int idx = 0;
foreach (FacebookPermissionRequest required_permssion in
RequiredPermissions.Values)
{
fbBatchParameters[idx] = new FacebookBatchParameter
{
HttpMethod = HttpMethod.Get,
Path = string.Format("{0}{1}",
"me/permissions/",
required_permssion.permision_scope_value)
.GraphAPICall(appsecret_proof)
};
required_permssion.granted = false; //initalize all granted indicators to false for each required permission
idx++;
}
dynamic permission_Batchresult = fb.Batch(
fbBatchParameters
);
if (permission_Batchresult != null)
{
List<PermissionResults> result = JsonConvert.
DeserializeObject<List<PermissionResults>>
(permission_Batchresult.ToString());
foreach (FacebookPermissionModel permissionResult in
result.SelectMany(x => x.data).Where(y => y.status == "granted"))
{
RequiredPermissions[permissionResult.permission].granted = true; // the error comes from here.
}
MissingPermissions = RequiredPermissions.Values.
Where(p => p.granted == false);
}
}
return MissingPermissions.ToList();
}
else
throw new HttpException(404, "Missing Access Token");
}
@TimSchmelter看我已經指出了其中的代碼拋出錯誤的代碼。是的,我沒有調試它,兩個值都顯示 – Newbie
因爲你已經閱讀了其他問題stackoverflow我想你已經知道如何避免這種情況與'ContainsKey'等等。但問題是:你爲什麼期望每個'permission'作爲字典中的關鍵字存在嗎? –
只是因爲要找到缺少的權限,未授予的權限 – Newbie