2017-02-22 2 views
1

です。 私は、The given key was not present in the dictionary.というエラーをスローする問題が何であるか把握しようとしていますが、残念なことに多くのSOの質問とブログの投稿はあまり役に立ちませんでした。解決方法指定されたキーが辞書エラーに存在しませんでしたか?

私はシンプルな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'などでこの栄誉を避ける方法を知っていると思います。辞書のキーとして存在しますか? –

+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); 
関連する問題