【问题标题】:How to solve The given key was not present in the dictionary error?如何解决 The given key was not present in the dictionary 错误?
【发布时间】:2017-02-22 11:21:40
【问题描述】:

所以。 我已经花了 3 个小时试图找出引发 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");
}

【问题讨论】:

  • @TimSchmelter 查看我指出的代码引发错误的位置。是的,我确实对其进行了调试,并显示了两个值
  • 既然您已经阅读了有关 stackoverflow 的其他问题,我想您已经知道如何使用 ContainsKey 等来避免这种异常。但问题是:您为什么希望每个 permission 都以输入字典?
  • 只是因为找到丢失的权限,没有授予的权限

标签: c# key


【解决方案1】:

在尝试修改字典之前,您应该检查字典是否包含所需的值。

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

【讨论】:

    【解决方案2】:
    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);
    

    【讨论】:

      猜你喜欢
      • 2019-09-22
      • 2014-05-13
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      • 1970-01-01
      相关资源
      最近更新 更多