Bitarray返回相同的初始值

时间:2018-03-25 06:32:22

标签: c# bitarray

我需要创建一个BitArray序列(即将每个值依赖于之前值的BitArray链接起来) 我还需要单独操作BitArray数组中每个元素的每个位 我有这段代码(注意desion的功能以正确的方式工作)

     BitArray[] sub_keys=new BitArray[10000];
     for (int i = 0; i < sub_keys.Length; i++)
          sub_keys[i] = b;
            for (int i = 1; i < sub_keys.Length; i++)
                for (int j = 1; j <119; j += 8)
                {
                     {
                                sub_keys[i].Set(j, desion_105(sub_keys[i - 1], j));
                                sub_keys[i].Set(j + 1, desion_150(sub_keys[i - 1], j + 1));
                                sub_keys[i].Set(j + 2, desion_151(sub_keys[i - 1], j + 2));
                                sub_keys[i].Set(j + 3, desion_152(sub_keys[i - 1], j + 3));
                                sub_keys[i].Set(j + 4, desion_153(sub_keys[i - 1], j + 4));
                                sub_keys[i].Set(j + 5, desion_154(sub_keys[i - 1], j + 5));
                                sub_keys[i].Set(j + 6, desion_155(sub_keys[i - 1], j + 6));
                                sub_keys[i].Set(j + 7, desion_156(sub_keys[i - 1], j + 7));
                            }
                                                }// for j end

                }//for i end

desion函数段是(都是相同的)

      public bool desion_150(BitArray ba, int index)
    {
        bool result;
        ........................// rest of code
        return result;

    }

我的问题是sub_keys总是返回相同的值(初始种子(b))。 我试图修复代码,但我失败了,谁能告诉我问题出在哪里了?!

1 个答案:

答案 0 :(得分:3)

BitArray是一种引用类型。您的初始化循环反复使用相同的实例,因此它们都将指向同一个对象实例。

而不是

for (int i = 0; i < sub_keys.Length; i++)
    sub_keys[i] = b;

尝试

for (int i = 0; i < sub_keys.Length; i++)
      sub_keys[i] = new BitArray(b);

...将为每个元素分配一个单独的新实例。通过将b传递给构造函数,您可以将新实例设置为b的副本,我相信这是您的预期行为。