Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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
for循环未按预期工作C#_C# - Fatal编程技术网

for循环未按预期工作C#

for循环未按预期工作C#,c#,C#,我正在为循环编写这个,但我遇到了一个严重困扰我的问题。当执行for循环时,它应该返回 {"MonID":"1","MonMapID":0} {"MonID":"1","MonMapID":1} {"MonID":"1","MonMapID":2} {"MonID":"1","MonMapID":3} 但它并没有回来,它确实回来了 {"MonID":"1","MonMapID":3} {"MonID":"1","MonMapID":1} {"MonID":"1","MonMapID":2} {"

我正在为循环编写这个
,但我遇到了一个严重困扰我的问题。当执行
for
循环时,它应该返回

{"MonID":"1","MonMapID":0}
{"MonID":"1","MonMapID":1}
{"MonID":"1","MonMapID":2}
{"MonID":"1","MonMapID":3}
但它并没有回来,它确实回来了

{"MonID":"1","MonMapID":3}
{"MonID":"1","MonMapID":1}
{"MonID":"1","MonMapID":2}
{"MonID":"1","MonMapID":3}
这是我运行的代码

JObject mapMonBranch = new JObject();
JArray monList = new JArray();
string[] monB = room.Mon.Split(Convert.ToChar(","));
for (int index = 0; index < monB.Length; index++)
{
    var monData = monB[index];
    if (string.IsNullOrEmpty(monData)) continue;

    mapMonBranch ["MonID"] = monData;
    mapMonBranch ["MonMapID"] = index;
    monList.Add(mapMonBranch);
}
JObject-mapMonBranch=new-JObject();
JArray monList=新的JArray();
字符串[]monB=room.Mon.Split(Convert.ToChar(“,”);
for(int index=0;index

代码有什么问题?我非常困惑。

您正在列表中添加对同一对象的四个引用。添加到列表会添加对该对象的引用,但不会创建该对象的新副本,因此如果修改该对象,列表中的所有条目都将更改。每次要添加对象实例时,都需要创建该对象的新实例,例如:

JArray monList = new JArray();
string[] monB = room.Mon.Split(Convert.ToChar(","));
for (int index = 0; index < monB.Length; index++)
{
    var monData = monB[index];
    if (string.IsNullOrEmpty(monData)) continue;

    JObject mapMonBranch = new JObject();
    mapMonBranch["MonID"] = monData;
    mapMonBranch["MonMapID"] = index;
    monList.Add(mapMonBranch);
}
JArray monList=new JArray();
字符串[]monB=room.Mon.Split(Convert.ToChar(“,”);
for(int index=0;index
您应该在循环中创建mapmon对象的新实例,如下所示:

JObject mapMonBranch = new JObject();
JArray monList = new JArray();
JObject mapMon = new JObject();
string[] monB = room.Mon.Split(Convert.ToChar(","));
for (int index = 0; index < monB.Length; index++)
{
    var monData = monB[index];
    if (string.IsNullOrEmpty(monData)) continue;

    mapmon = new JObject(); 
    mapMon["MonID"] = monData;
    mapMon["MonMapID"] = index;
    monList.Add(mapMonBranch);
}
JObject-mapMonBranch=new-JObject();
JArray monList=新的JArray();
JObject mapMon=新的JObject();
字符串[]monB=room.Mon.Split(Convert.ToChar(“,”);
for(int index=0;index
什么是
mapMon
?请提供一个。您正在将
mapMonBranch
添加到
monList
,但这不会出现在循环中的其他位置,您还可以设置
mapMon
,这也不会在循环中引用。我想您可以将
Convert.ToChar(“,”
替换为
”,“
它没有mapMonBranch!!请告诉我们mapMonBranch是什么-这将比你已经提出的代码图片更有用