Bạn sẽ sử dụng phản chiếu như thế nào để thực thi phương thức sau đây khi loại chỉ có thể suy ra khi chạy?Cách kích hoạt một phương thức chung để thực hiện hành động làm tham số
MainObject.TheMethod<T>(Action<OtherObject<T>>)
trong sử dụng hàng ngày, điển hình là:
mainObject.Method<Message>(m => m.Do("Something"))
Vì vậy, đưa ra một danh sách các loại, tôi cần phải thay thế chúng cho T trong phương pháp trên và gọi.
Đây là nơi tôi đã nhận trước khi đầu tôi để quay sang putty:
var mapped = typeof(Action<OtherObject<>>).MakeGenericType(t.GetType());
Activator.CreateInstance(mapped, new object[] { erm do something?});
typeof(OtherObject)
.GetMethod("TheMethod")
.MakeGenericMethod(t.GetType())
.Invoke(model, new object[] { new mapped(m => m.Do("Something")) });
Cập nhật: Để làm rõ, tôi có một danh sách các loại và tôi muốn thực hiện cùng một phương pháp được biết đến của OtherObject cho mỗi . Pseudo-code:
foreach(var t in types)
{
mainObject.TheMethod<t>(mo => mo.Do("Something"))
}
(Kiểu của tham số cho TheMethod() là Action<OtherObject<T>>
như đã nêu trên)
FluentNHibernate.Automapping.AutoPersistenceModel Override<T>(System.Action<AutoMapping<T>> populateMap)
hành động là như nhau của AutoMapping<T>.Where("something")
model.Override<Message>(m => m.Where("DeletedById is null"))
Bây giờ, làm điều đó cho một loạt các loại :)
là cơ thể của hành động luôn luôn giống nhau, ví dụ luôn 'm.Do ("Something") '? –
có, thêm một số làm rõ ở trên –
Câu trả lời của tôi có giúp ích cho bạn không? –