Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将对象添加到字典会获得与预期不同的值_C#_Json_Dictionary - Fatal编程技术网

C# 将对象添加到字典会获得与预期不同的值

C# 将对象添加到字典会获得与预期不同的值,c#,json,dictionary,C#,Json,Dictionary,我有一些奇怪的行为,工作了5天,似乎还没有找到问题。我不知道这是我愚蠢的错误还是我使用了一种糟糕的方法,所以发生了这样的事情。但我认为列表是问题所在,但我不确定 我正在使用名为Item的类的列表作为json的模型。我 我认为清单上的项目没有问题,因为我已经检查过了 列表中的所有项,其值与json上的值相同 我的方法是在每一项上使用一个键访问的列表,所以我使用的是字典但奇怪的事情是这样的: 添加到字典中的项在项目编号30后循环(添加相同的键和值),但当我使用断点检查它时,项目中的变量项具有我预期的

我有一些奇怪的行为,工作了5天,似乎还没有找到问题。我不知道这是我愚蠢的错误还是我使用了一种糟糕的方法,所以发生了这样的事情。但我认为列表是问题所在,但我不确定

我正在使用名为Item的类的列表作为json的模型。我 我认为清单上的项目没有问题,因为我已经检查过了 列表中的所有,其值与json上的值相同

我的方法是在每一项上使用一个键访问的列表,所以我使用的是字典但奇怪的事情是这样的

添加到字典中的在项目编号30后循环(添加相同的键和值),但当我使用断点检查它时,项目中的变量项具有我预期的正确值。但是当它被添加到字典中时,添加到字典中的项(dictionary)不是刚才添加的局部变量foreach语句中的项

这是来自JSON的模型

class Item
{
    public string Key { get; set; }
    public string Description { get; set; }
    public string Question { get; set; }
    public double CF { get; set; }
}
下面是一些我似乎无法发现的奇怪行为的代码:

modelItems = new Dictionary<string, factItem>();
itemsDictionary = new Dictionary<string, Item>();

foreach (Item item in items)
            {
                item.CF = 0;
                if (!item.Question.Equals(""))
                {
                    factItem f = new factItem(item.Key, item.Description, item.Question);
                    f.CF = 0;
                    modelItems.Add(item.Key, f);
                }
                itemsDictionary.Add(item.Key, item);
            }
modeleItems=newdictionary();
itemsDictionary=新字典();
foreach(项目中的项目)
{
item.CF=0;
如果(!item.Question.Equals(“”)
{
factItem f=新的factItem(item.Key、item.Description、item.Question);
f、 CF=0;
modelItems.Add(item.Key,f);
}
itemsDictionary.Add(item.Key,item);
}
factItem继承Item类,并且也有相同的问题

这是截图。我正在使用断点并在奇怪行为发生之前以及奇怪行为开始时对其进行迭代:


我已经在使用另一种方法将列表翻译成字典,使用
dictionary=list.ToDictionary(funcForKey,funcForValue)
,但仍然面临同样的问题


<强>我非常感谢大家对我的问题的回答

> P>如果条目的顺序很重要,那么你应该考虑使用<代码> SortedDictionary < /Cord>对象,而不是泛型<代码>字典< /> >;有关MSDN online实施的更多详细信息:
希望这能有所帮助。祝您好运,

您还没有清楚地解释实际问题是什么。看起来可能是项目未订购,但您尚未指定。如果确实是这样的话,这其实并不重要,因为使用字典的主要原因之一是基于键的查找速度,所以排序其实并不重要。如果必须对它们进行排序,您可以使用linq的OrderBy或。如果您检查:字典中该条目的键为“X016”,而该项的键字段为“X030”,那么问题似乎就像Visual Studio在调试时检查变量时出现了小故障。请同意,显示数据时可能存在某种Visual Studio错误。要检查字典是否正确,请添加以下断言:
Debug.assert(!itemsDictionary.Any(pair=>pair.Key!=pair.Value.Key))。最后,我发现这是VisualStudio的bug,就像@BlasSoriano说的。谢谢各位。也许索里亚诺可以把它作为一个答案,我会接受的。谢谢你的回复,先生,但是列表的顺序在这里并不重要。我对问题进行了编辑,以弄清问题所在。列表中的项将添加到字典中。在下一次迭代中,添加到字典的项不是之前添加的实际项,然后您可能需要检查业务逻辑和数据源。在不知道具体实现细节的情况下调试代码是非常困难的。我还建议重新格式化您的问题,用可读文本替换这些图像。亲切问候,,