1

我对这段代码很生气:

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

再见M。

4

5 回答 5

2

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

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

于 2012-06-06T09:59:25.737 回答
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
于 2012-06-06T10:00:18.293 回答
0

通过分配:

newFilter = customFilter;

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

于 2012-06-06T10:00:05.603 回答
0

您不是在复制 customFilter 的属性,而是为 newFilter 分配对与 customFilter 相同的对象的引用(假设您已声明Filterclass)。

您可以创建一个复制构造函数并由此创建您的对象:

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();
于 2012-06-06T10:00:19.840 回答
0

问题是您在第 4 行使用 newFilter 引用了 customFilter

于 2012-06-06T10:00:35.220 回答