C# 如何解决字典中不存在给定密钥的错误?

C# 如何解决字典中不存在给定密钥的错误?,c#,key,C#,Key,所以。 3个小时以来,我一直在试图找出引发问题的原因。给定的键在字典中不存在。错误,但不幸的是,通过这么多的问题和博客帖子并没有起到太大的作用 我有一个简单的Facebook批处理参数字典,当我遍历结果时,它抛出错误,字典中不存在给定的键 以下是引发异常的代码: foreach (FacebookPermissionModel permissionResult in result.SelectMany(x => x.data).Where(y => y.status == "

所以。 3个小时以来,我一直在试图找出引发
问题的原因。给定的键在字典中不存在。
错误,但不幸的是,通过这么多的问题和博客帖子并没有起到太大的作用

我有一个简单的Facebook批处理参数字典,当我遍历结果时,它抛出错误
,字典中不存在给定的键

以下是引发异常的代码:

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");
}
受保护列表检查权限(字典要求权限)
{
var access_token=HttpContext.Items[“access_token”].ToString();
如果(!string.IsNullOrEmpty(访问令牌))
{
var appsecret_proof=access_token.GenerateAppSecretProof();
var fb=新的FacebookClient(访问令牌);
IEnumerable MissingPermissions=
新建列表();//初始化为空列表
if(MissingPermissions!=null)
{
//根据所需权限列表创建Facebook批处理参数数组
FacebookBatchParameter[]fbBatchParameters=
新的FacebookBatchParameter[RequiredPermissions.Values.Count()];
int-idx=0;
foreach(需要FacebookPermissionRequest\u Permission in
RequiredPermissions.Values)
{
fbBatchParameters[idx]=新的FacebookBatchParameter
{
HttpMethod=HttpMethod.Get,
Path=string.Format(“{0}{1}”,
“我/权限/”,
所需权限(许可范围值)
.GraphAPICall(appsecret\u-proof)
};
required_permission.grated=false;//为每个所需权限将所有授予的指示符初始化为false
idx++;
}
动态权限\u Batchresult=fb.Batch(
fbBatchParameters
);
if(权限\批处理结果!=null)
{
列表结果=JsonConvert。
反序列化对象
(permission_Batchresult.ToString());
foreach(FacebookPermissionModel permissionResult in
result.SelectMany(x=>x.data)。其中(y=>y.status==“已授予”))
{
RequiredPermissions[permissionResult.permission].grated=true;//错误来自此处。
}
MissingPermissions=RequiredPermissions.Values。
其中(p=>p.grated==false);
}
}
返回MissingPermissions.ToList();
}
其他的
抛出新的HttpException(404,“缺少访问令牌”);
}

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

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

@TimSchmelter看看我指出的代码,代码在哪里抛出错误。是的,我调试了它,并且两个值都显示出来了。当您阅读了stackoverflow上的其他问题时,我想您已经知道如何使用
ContainsKey
等来避免这一过度。但问题是:为什么您希望每个
权限都作为关键字出现在字典中?只是因为要查找缺少的权限,未授予的权限
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);