我对这段代码感到生气:
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也会发生变化。 有人能帮助我吗?
再见 微米。
答案 0 :(得分:2)
删除行newFilter = customFilter;
并手动复制每个属性。
以上行将customFilter
中的引用复制到newFilter
变量,替换刚刚创建的新过滤器。此操作后newFilter
和customFilter
指向完全相同的对象。
答案 1 :(得分:1)
newFilter
只是一个变量。我假设Filter
是一个班级;在这种情况下,当你这样做时:
Filter newFilter = new Filter();
newFilter = customFilter;
你可以忘记关于new Filter()
- 你刚刚放在地板上的某个地方,无法从某个地方进入:你已将newFilter
设为参考现有对象,通过现有参考customFilter
。
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
答案 2 :(得分:0)
通过分配:
newFilter = customFilter;
两个引用newFilter
和customFilter
指向同一个对象!
答案 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行