2017-02-22 166 views
1

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"); 
} 
+0

@TimSchmelter看我已經指出了其中的代碼拋出錯誤的代碼。是的,我沒有調試它,兩個值都顯示 – Newbie

+0

因爲你已經閱讀了其他問題stackoverflow我想你已經知道如何避免這種情況與'ContainsKey'等等。但問題是:你爲什麼期望每個'permission'作爲字典中的關鍵字存在嗎? –

+0

只是因爲要找到缺少的權限,未授予的權限 – Newbie

回答

0

你應該檢查字典包含試圖修改之前所需的值。

foreach (FacebookPermissionModel permissionResult in 
         result.SelectMany(x => x.data).Where(y => y.status == "granted")) 
{ 
    if (RequiredPermissions.ContainsKey(permissionResult.permission)) 
    { 
     RequiredPermissions[permissionResult.permission].granted = true; 
    { 
} 
0
some permissions not there in RequiredPermissions 

      if (RequiredPermissions.ContainsKey(permissionResult.permission)) 
       RequiredPermissions[permissionResult.permission].granted = true; // the error comes from here. 
      else 
       Debug.WriteLint("RequiredPermissions obj does not contain this key " + permissionResult.permission); 
相關問題