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也会发生变化。有人可以帮助我吗?
再见米.
删除行newFilter = customFilter;
并手动复制每个属性。
上行将customFilter
中的引用复制到 newFilter
变量,替换刚刚创建的新筛选器。 newFilter
和 customFilter
在此操作后指向完全相同的对象。
newFilter
只是一个变量。我假设Filter
是一个类;在这种情况下,当您执行此操作时:
Filter newFilter = new Filter();
newFilter = customFilter;
您可以忘记new Filter()
- 您只是将其放在地板上的某个地方,无法从任何地方访问:您已通过现有引用customFilter
将newFilter
设置为对现有对象的引用。
newFilter
和customFilter
现在是对同一对象的引用。
我怀疑您只需要删除该行:
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;
这两个引用newFilter
和customFilter
指向同一个对象!
问题是你引用了 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();