多くのオブジェクトでプロパティに値を設定しようとしています。 私は2つのパラメータMyStructuredObjectsとMyObjectを受け取る関数を持っています MyStructuredObjectsにMyObjectのリストがあります。 この関数は多くの 'if'を削除するための再作成です。SetValueメソッドは、反射を使用すると例外をスローします。
これはループで使用される機能なので、同じオブジェクトを使用したいと思います。可能であれば、 「オブジェクトがターゲットと一致しません」という例外が発生しました。 これを投稿して申し訳ありませんが、このような問題は見つかりませんでした。オブジェクト構造内でListを使用しています。
は見てみましょう:
public class MyStructuredObjects
{
public List<MyObject1> Object1 { get; set; }
public List<MyObject2> Object2 { get; set; }
public List<MyObject3> Object3 { get; set; }
public List<MyObject4> Object4 { get; set; }
public List<MyObject5> Object5 { get; set; }
}
private void SetValuesToObjectsToIntegrate<T>(ref MyStructuredObjects returnedObject, T obj)
{
Type t = obj.GetType();
var propertyInfo = new ObjectsToIntegrate().GetType().GetProperties();
var instance = Activator.CreateInstance(t);
foreach (var item in returnedObject.GetType().GetProperties())
{
var itemType = item.PropertyType;
if (t == itemType) // PASSING BY HERE OK , it finds the same type :P
{
item.SetValue(t, Convert.ChangeType(obj, item.PropertyType), null);
}
}
}
アップデート:コードは次のようになります。
item.SetValue(instance, Convert.ChangeType(obj, item.PropertyType), null);
'SetValue'は* *インスタンスを期待しています。あなたはそれを型に渡しているだけです。あなたはおそらく 'item.SetValue(returnedObject ...' – Rob
Robを使って、コード に変更します。item.SetValue(インスタンス、Convert.ChangeType(obj、item.PropertyType)、null); ' –
@Summerson - コメントを無効にするためにあなたの質問を編集しないでください。 – Enigmativity