C# 拿到钥匙时的奇怪行为

C# 拿到钥匙时的奇怪行为,c#,dictionary,asp.net-mvc-5,C#,Dictionary,Asp.net Mvc 5,所以我有一句话: string theWhereClause = " levels = '" + LevelItems[SelectedLevel] + "' AND areas = '" + AreaItems[SelectedArea] + "'"; AreaItems[SelectedArea] AreaItems是一个Dictionary,而SelectedArea由于某种原因具有值“Statistics and Probabili

所以我有一句话:

string theWhereClause = " levels = '" + LevelItems[SelectedLevel] + 
                        "' AND areas = '" + AreaItems[SelectedArea] + "'";
AreaItems[SelectedArea] 
AreaItems
是一个
Dictionary
,而
SelectedArea
由于某种原因具有值“Statistics and Probability”,调试时,它在这一行中断:

string theWhereClause = " levels = '" + LevelItems[SelectedLevel] + 
                        "' AND areas = '" + AreaItems[SelectedArea] + "'";
AreaItems[SelectedArea] 
并抛出以下错误:

字典中不存在给定的键。

这是
区域items[]
中的内容:

[0] {[All, All]}
[1] {[Number, Number]}
[2] {[Shape Space and Measures, Shape Space and Measures]}
[3] {[Statistics and Probability, Statistics and Probability]}
[4] {[Algebra, Algebra]}
[5] {[Other, Other]}
但是,如果我将字符串硬编码为:

AreaItems[“统计和概率”]
它工作得非常好

我所尝试的:

AreaItems[SelectedArea].Trim() 
认为他们是一些隐藏的角色,这仍然不起作用

我试过:

SelectedArea = "Shape Space and Measures";
AreaItems[SelectedArea] 
认为变量中的间距是原因,我错了。。它与变量中的该值一起工作

我做了一个IF声明,以检查它们之间是否存在任何差异:

if(SelectedArea == "Statistics and Probability")
{

}
它通过IF语句返回,因此返回true

最后一个有效的方法是:

string temp = AreaItems[SelectedArea];
string theWhereClause = " levels = '" + LevelItems[SelectedLevel] + 
                        "' AND areas = '" + temp + "'";
这次我所做的就是将
AreaItems
值存储在不同的字符串(temp)中,并将该字符串放在
TheWhere子句中,它就工作了

虽然这是可行的,但我还是很好奇为什么第一次没有成功

AreaItems[SelectedArea]
string temp=AreaItems[SelectedArea]
中获取值有什么区别导致了这种奇怪的行为

帮助你们的附加代码:

因此,要调用此方法,我使用的是
AJAX
,它将值发送到此方法:

    [HttpPost]
    public ActionResult SearchForWorksheets(string level, string area)
    {
        Models.FreeMathsWorksheets freeWorkSheets = new Models.FreeMathsWorksheets();
        freeWorkSheets.SelectedLevel = level;

        // When debugging, at this point the area is "Statistics and Probability"
        freeWorkSheets.SelectedArea = area

        freeWorkSheets.BuildWhereClause();
        List<Models.SearchMathWorksheetsList> WorksheetList = new List<Models.SearchMathWorksheetsList>();
        WorksheetList = freeWorkSheets.ConvertDataTableToList();
        return Json(WorksheetList);
     }

AreaItems[SelectedArea].Trim()
您在访问字典后正在进行修剪,您的意思是不是
AreaItems[SelectedArea.Trim()]
,如果您在那一行中断,调试器对
selectedrea
说了什么?如果键和值相同,您似乎不需要字典。我强烈怀疑
selectedrea
AreaItems
在字符串串联中访问字典与分配给临时值的更改之间发生了变化变量如何填充这些变量?使用调试器!这就是它的目的。断线。检查。赢。@J3soon不,一点也不。。
LevelItems
是一个公共字段