for循环中的新对象

时间:2012-06-06 09:56:55

标签: c# loops for-loop

我对这段代码感到生气:

for (int h = 0; h < invocations; h++)
{
    Filter newFilter = new Filter();
    newFilter = customFilter;
    newFilter.DateFrom = customFilter.DateFrom.AddDays(h*8);
    newFilter.DateTo = newFilter.DateTo.AddDays(8).AddSeconds(-1);

customFilter是Filter 类型的对象 customFilter是一个对象,它正确填充了大约10个属性。我需要创建一个新对象,但我只需更改其中的两个:DateFrom和DateTo。 问题是在分配newFilter.DateFrom和newFilter.DateTo之后,customFilter.DateFrom和customFilter.DateTo也会发生变化。 有人能帮助我吗?

再见 微米。

5 个答案:

答案 0 :(得分:2)

删除行newFilter = customFilter;并手动复制每个属性。

以上行将customFilter中的引用复制到newFilter变量,替换刚刚创建的新过滤器。此操作后newFiltercustomFilter指向完全相同的对象。

答案 1 :(得分:1)

newFilter只是一个变量。我假设Filter是一个班级;在这种情况下,当你这样做时:

Filter newFilter = new Filter();
newFilter = customFilter;

你可以忘记关于new Filter() - 你刚刚放在地板上的某个地方,无法从某个地方进入:你已将newFilter设为参考现有对象,通过现有参考customFilter

newFiltercustomFilter现在是引用同一个对象

我怀疑你只需删除该行:

newFilter = customFilter;

离开:

Filter newFilter = new Filter();
// set all properties on newFilter

或使其可克隆:

Filter newFilter = customFilter.Clone();
// set just the properties that need changing on newFilter

答案 2 :(得分:0)

通过分配:

newFilter = customFilter;

两个引用newFiltercustomFilter指向同一个对象!

答案 3 :(得分:0)

您没有复制customFilter的属性,您正在为newFilter分配与customFilter相同的对象的引用(假设您已将Filter声明为class)。

您可以创建一个复制构造函数并从中创建对象:

public Filter(Filter template) {
    this.Prop1 = template.Prop1;
    this.Prop2 = template.Prop2;
    // etc.
}

然后像这样使用它:

Filter newFilter = new Filter(customFilter);

或者您可以在Clone()类中提供返回克隆的Filter方法:

public Filter Clone() {
    Filter result = new Filter();
    result.Prop1 = this.Prop1;
    result.Prop2 = this.Prop2;
    // etc.
    return result;
}

可以像这样使用:

Filter newFilter = customFilter.Clone();

答案 4 :(得分:0)

问题是你引用了customFilter,你的newFilter在第4行