0

私は何かを書き込もうとしているタイプ 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;
}

基本的なものになることはわかっていますが、私が見る限り、常に新しいプライマリ/バックアップ ボックスを使用しているため、競合するものは何もありません。どんなアイデアでも大歓迎です。

乾杯。

PS私が投稿するたびに、SOは最初の単語を削除するため、2回入力する必要があります. なぜそれが起こるのかについてのアイデアはありますか?

編集:以下にリストされているすべてのアプローチで同じ結果が得られたため、これは解決できない問題であると推測しています。したがって、私は製図板に戻って、これとは異なる方法でアプローチしようとしています。とにかく、すべての助けをありがとう、チャップス:)

4

3 に答える 3

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;
}

元のコードには 2 つの問題があると思います。

  • primaryループの外でbackup宣言されています。
  • 他のforeachコレクションにエントリを複数回追加するループ内のループ。
于 2012-08-06T10:35:53.813 に答える
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);
于 2012-08-06T10:44:26.993 に答える
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 が関数内に存在する必要のない public 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);
            }             
        }                        
    }
于 2012-08-06T10:33:37.783 に答える