2012-01-25 8 views
1

いくつかのプロパティ値をあるオブジェクトから別のオブジェクトにコピーしようとしています(両方のオブジェクトがIVenueを実装していますが、オブジェクトbには動的に削除された値が必要です)。ReflectionのSetValueが例外をスローするのはなぜですか?

"Object does not match target type"

:私はエラーが表示さしかし

public VenueContract(TVDData.Interfaces.IVenue v, List<TVDData.APIClientPermittedFields> permittedFields) 
{ 
    PropertyInfo[] Properties = this.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); 
    foreach (PropertyInfo p in Properties) 
    { 
     PropertyInfo source = v.GetType().GetProperty(p.Name, BindingFlags.Public | BindingFlags.Instance); 
     p.SetValue (p, source.GetValue(v,null),null); 
    } 
} 

:私はループにプロパティをリフレクションを使用し、全体にコピーしようとしています

a.Property1 = b.Property1; 
a.Property2 = b.Property2; 
etc 

:のようなコードの多くを回避したいというどちらのプロパティもint型で、次のように宣言されています。

public int ID { get; set; } 

p.SetValueとしてと表示される問題が発生します。source.GetValue(v、null)は期待値を返します。

私が間違っていることを誰も説明できますか?より適切な解決策があれば、完全に代替的なアプローチを提案してください。 SetValue

答えて

4

あなたの最初の引数が正しくありません - それはPropertyInfoにプロパティを設定しようとします。

おそらく意味:

p.SetValue(this, source.GetValue(v, null), null); 
+1

氏スキート、私はあなたにキスでした(しかし、私はしません)。 – Simon

関連する問題