for 循环中的新对象

本文关键字:对象 新对象 循环 for | 更新日期: 2023-09-27 18:36:30

我对这段代码很生气:

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 是一个对象,其中有大约 10 个属性正确填充。我需要创建一个新对象,但我必须更改这 10 个对象中的两个:DateFrom 和 DateTo。问题是,在分配newFilter.DateFrom和newFilter.DateTo之后,customFilter.DateFrom和customFilter.DateTo也会发生变化。有人可以帮助我吗?

再见米.

for 循环中的新对象

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

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

newFilter只是一个变量。我假设Filter是一个类;在这种情况下,当您执行此操作时:

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

您可以忘记new Filter() - 您只是将其放在地板上的某个地方,无法从任何地方访问:您已通过现有引用customFilternewFilter设置为对现有对象的引用。

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

通过分配:

newFilter = customFilter;

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

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

你不是在复制customFilter的属性,而是在为newFilter分配一个对与customFilter相同的对象的引用(假设你已经将Filter声明为class)。

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

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

然后像这样使用它:

Filter newFilter = new Filter(customFilter);

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

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

它可以像这样使用:

Filter newFilter = customFilter.Clone();