2011-07-21 14 views
1

同じ関数を使ってクラスのすべてのプロパティを設定する必要があります。現在、私はリフレクションを使ってすべてのプロパティを取得し、値を設定するためにループしています。私はすべてのプロパティを知っている、何も動的な出来事はありません。ここでは、反射なしでこれを行うためのより良い方法はありますか?

は、私は現在、私のコンストラクタで実行しています私のコードです:

foreach (PropertyInfo property in this.GetType().GetProperties()) 
{ 
    // retreive the value and set it 
    property.SetValue(this, GetValue(field), null); 
}

は、リフレクションを使用せずに似た何かをする方法はありますか?

+3

ソースコードは重要な部分を省略しています...フィールドはどこから来ていますか?あなたはクラスを知っていますか、これは別のクラスで動作するはずの関数ですか? – Yahia

+0

どのバージョンの.NETを使用していますか? – mdm

+0

なぜコンストラクタでこれをやっていますか?コンストラクタでは、あなたのクラスにどのようなプロパティがあるのか​​確実に知っていますか? – Yahia

答えて

4

ここに記載されている情報に基づいて認識しているわけではありません。

これは、何をしているのですか?とにかく、ループ内のすべてのプロパティを繰り返し処理する必要があるのはなぜですか。どれくらいありますか?

もう少し詳しくお書きください。たとえば、プロパティは何をしていますか?反射を使わずに変更できる基になるデータに接続されていますか?あなたはそれらの多くを持っている場合、離散財産の束を持っていることは行く方法ですか?

+0

すべてのフィールドは、基礎となるデータにマップされ、ビューで使用されます。私が避けようとしている問題は、プロパティの変更(編集、削除、追加)を簡単に変更できるようにすることと、プロパティの変更のために多くの場所でコードを更新しないようにする、 – Victor

+0

したがって、私が正しく理解している場合、(たとえば)Usernameと呼ばれるプロパティがあり、同じ名前のフィールドにそのプロパティをマップする必要があります。プロパティの名前を変更するとコンストラクタを更新する必要はありません。フィールド名。あなたの質問への答えは私が信じていない、あなたはこれを行うためにリフレクションを使わなければならない。それは、コードの更新を少しでも節約するための賢明な道のりではないと私は確信しています。フィールド名を変更する頻度はどれくらいですか? – iandotkelly

+0

あなたが言っているように、私は個々のプロパティを個別に設定する必要があるかもしれないと思います。私は、コードを更新するコストは、反映のコストよりも少なくなると思います。パフォーマンスは重要です。私はこのようなクラスがたくさんあるので、私は使用する最良のパターンを決定しようとしています。 – Victor

1

私は多分あなたが言っていることを誤解しているかもしれませんが、あなたはすべてのプロパティを知っていると言っています。

void SetValues() { 
    this.Property1 = field1; 
    this.Property2 = field2; 
    this.Property3 = field3; 
    this.Property4 = field4; 
} 

あなたの質問に何か不足があると思われます。

+0

これはまさに私がやりたいことです。私のプロパティは頻繁に変更され、同じ関数を実行して各フィールドの値を取得する必要があるため、抽象化しています。 – Victor

+0

@Victor - プロパティをどのように宣言していますか?それは '自動'プロパティか、明示的な基礎データを持つプロパティですか? – iandotkelly

+0

@iandotkelly私はあなたが「自動」特性によって何を意味するのか分かりません。彼らはすべて基本的なデータを持っています。 – Victor

関連する問題