我有一个类型为BoxPair的静态公共列表,我正在尝试编写内容,但每次添加新条目时它都会更改每条记录。我希望有人能看到这里出了什么问题,因为它让我有些疯狂。完整的附加代码如下:
public static List<BoxPair> CreateBoxPair (int iBoxCount)
{
SetTopBox primary;
SetTopBox backup;
for (int i = 0; i < iBoxCount; i++)
{
primary = new SetTopBox();
backup = new SetTopBox();
primary.IBoxNumber = i;
primary.SDeviceName = "Box" + (i + 1).ToString("00");
primary.Role = Box.ROLE_PRIMARY;
backup.IBoxNumber = i;
backup.SDeviceName = "Box" + (i + 1).ToString("00");
backup.Role = Role.ROLE_BACKUP;
lstBoxes.Add(new BoxPair(primary, Role));
lstBoxes.Add(new BoxPair(backup, Role));
foreach (BoxPair p in lstBoxes)
{
Declarations.BOXES.Add(p);
}
}
return lstBoxes;
}
我知道这将是一个基本的东西,但从我所看到的,我总是使用一个新的主/备用盒,所以没有什么可以冲突。任何想法都将不胜感激。
干杯。
P.S。我发的每个帖子都删除了第一个单词,所以我必须输入两次。关于为什么会发生这种情况的任何想法?
编辑:由于下面列出的所有方法都给出了相同的结果,我猜这是一个无法解决的问题。因此,我回到绘图板试图以不同的方式处理。感谢所有的帮助,无论如何,chaps:)
答案 0 :(得分:2)
从评论中我最有效的代码是:
public static List<BoxPair> CreateBoxPair (int iBoxCount)
{
for (int i = 0; i < iBoxCount; i++)
{
var primary = new SetTopBox();
var backup = new SetTopBox();
primary.IBoxNumber = i;
primary.SDeviceName = "Box" + (i + 1).ToString("00");
primary.Role = Box.ROLE_PRIMARY;
backup.IBoxNumber = i;
backup.SDeviceName = "Box" + (i + 1).ToString("00");
backup.Role = Role.ROLE_BACKUP;
var primaryPair = new BoxPair(primary, Role);
var backupPair = new BoxPair(backup, Role);
lstBoxes.Add(primaryPair);
lstBoxes.Add(backupPair);
Declarations.BOXES.Add(primaryPair);
Declarations.BOXES.Add(backupPair);
}
return lstBoxes;
}
我认为原始代码中存在两个问题:
primary
和backup
在循环外宣布。foreach
循环多次将条目添加到其他集合。答案 1 :(得分:1)
替换
lstBoxes.Add(new BoxPair(primary, Role));
lstBoxes.Add(new BoxPair(backup, Role));
foreach (BoxPair p in lstBoxes)
{
Declarations.BOXES.Add(p);
}
由此:
var p1 = new BoxPair(primary, Role);
var p2 = new BoxPair(backup, Role);
lstBoxes.Add(p1);
lstBoxes.Add(p2);
Declarations.BOXES.Add(p1);
Declarations.BOXES.Add(p2);
答案 2 :(得分:0)
我认为你刚刚错过了lstBoxes var声明,List<BoxPair> lstBoxes = new List<BoxPair>;.
public static List<BoxPair> CreateBoxPair (int iBoxCount)
{
SetTopBox primary;
SetTopBox backup;
List<BoxPair> lstBoxes = new List<BoxPair>();
for (int i = 0; i < iBoxCount; i++)
{
primary = new SetTopBox();
backup = new SetTopBox();
primary.IBoxNumber = i;
primary.SDeviceName = "Box" + (i + 1).ToString("00");
primary.Role = Box.ROLE_PRIMARY;
backup.IBoxNumber = i;
backup.SDeviceName = "Box" + (i + 1).ToString("00");
backup.Role = Role.ROLE_BACKUP;
lstBoxes.Add(new BoxPair(primary, Role));
lstBoxes.Add(new BoxPair(backup, Role));
foreach (BoxPair p in lstBoxes)
{
Declarations.BOXES.Add(p);
}
}
return lstBoxes;
}
如果lstBoxes是一个不需要在函数中的公共var,则不返回它:
public static Void CreateBoxPair (int iBoxCount)
{
SetTopBox primary;
SetTopBox backup;
for (int i = 0; i < iBoxCount; i++)
{
primary = new SetTopBox();
backup = new SetTopBox();
primary.IBoxNumber = i;
primary.SDeviceName = "Box" + (i + 1).ToString("00");
primary.Role = Box.ROLE_PRIMARY;
backup.IBoxNumber = i;
backup.SDeviceName = "Box" + (i + 1).ToString("00");
backup.Role = Role.ROLE_BACKUP;
lstBoxes.Add(new BoxPair(primary, Role));
lstBoxes.Add(new BoxPair(backup, Role));
foreach (BoxPair p in lstBoxes)
{
Declarations.BOXES.Add(p);
}
}
}