私は以下のクラス構造を持っています。私はこのエラーが発生しています。ここに何かがないのですか?リフレクトを使用してクラスのインスタンスのジェネリックリストプロパティにオブジェクトを追加する方法
オブジェクトがターゲットタイプと一致しません。私がしようとしています何
クラス構造
public class Schedule
{
public Schedule() { Name = ""; StartDate = DateTime.MinValue; LectureList = new List<Lecture>(); }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public List<Lecture> LectureList { get; set; }
}
public class Lecture
{
public string Name { get; set; }
public int Credit { get; set; }
}
は:
// gets metadata of List<Lecture>.Add method
var addMethod = pi.PropertyType.GetMethod("Add");
// retrieves current LectureList value to call Add method
var lectureList = pi.GetValue(s);
// calls s.LectureList.Add(obj);
addMethod.Invoke(lectureList, new object[] { obj });
UPD:
Schedule s = new Schedule();
Type t = Type.GetType("Lecture");
object obj = Activator.CreateInstance(t);
obj.GetType().GetProperty("Name").SetValue(obj, "Math");
obj.GetType().GetProperty("Credit").SetValue(obj, 1);
PropertyInfo pi = s.GetType().GetProperty("LectureList");
Type ti = Type.GetType(pi.PropertyType.AssemblyQualifiedName);
ti.GetMethod("Add").Invoke(pi, new object[] { obj });
問題を再現しようとしますが、私は別の問題を発見しました。文字列のときに 'Credit 'に' 1'を設定します。型をintに変更します。 –
@stuartd私は反射を正しく使う理由がありますか? – Helio
私はあなたのコードを試してみましたが、この文の後にnull値があります タイプt = Type.GetType( "Lecture"); 明らかに、次のステートメントはnull ref例外をスローしますが、得られたメッセージは異なるものです。 Type.GetTypeの使用が問題の可能性があることがわかりました。その場合は、Jon Skeetの答えを確認してください - http://stackoverflow.com/a/1044472/1966993 –