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は、タイプFilterのオブジェクトです。customFilterは、 内部に約10個のプロパティが正しく入力されているオブジェクトです。新しいオブジェクトを作成する必要がありますが、DateFromとDateToの2つだけを変更する必要があります。問題は、newFilter.DateFromとnewFilter.DateToの割り当て後、customFilter.DateFromとcustomFilter.DateToも変更されることです。誰かが私を助けてもらえますか?

さようならM。

4

5 に答える 5

2

行を削除し、newFilter = customFilter;各プロパティを手動でコピーします。

上記の行は、参照を変数にコピーし、customFilter作成しnewFilterたばかりの新しいフィルターを置き換えます。newFilterこの操作の後、まったく同じオブジェクトをcustomFilter指します。

于 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;

2つの参照newFiltercustomFilter同じオブジェクトを指します!

于 2012-06-06T10:00:05.603 に答える
0

customFilterのプロパティをコピーするのではなく、customFilterと同じオブジェクトへの参照をnewFilterに割り当てます(として宣言したと仮定します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 に答える