我根据我提供的模型构建了一个为我创建表单的函数。
using MyProject.Models;
...
public partial class CRUDPage : ContentPage
{
public CRUDPage()
{
InitializeComponent();
Teacher teacher = new Teacher
{
id = 1,
name = "John Smith",
DOB = new DateTime(1995, 9, 12),
place = "Hebron",
salary = 20.5
};
//set the content of the page >>> PCL, Xamarin.forms
Content = new FormGenerator<Teacher>().GenerateForm(teacher);
}
}
我试图通过允许使用任何类型的模型创建表单但没有运气来使代码更具动态性。代码应该是这样的。
public partial class CRUDPage : ContentPage
{
public CRUDPage(object entity)
{
InitializeComponent();
Content = new FormGenerator<typeof(entity) >().GenerateForm(entity);
}
}
但上面的代码不起作用; Type
看起来与Class
本身不同。
如何获取对象的“类类型”以将其用作函数中的泛型类型?
答案 0 :(得分:1)
查看FormGenerator
的图片,mform
需要T
吗?如果代码是object
,您的代码是否仍然可以使用?如果是这样,你可以摆脱泛型并解决问题。
答案 1 :(得分:0)
您必须使用MakeGenericType
来创建仅在运行时知道该类型的实例。
public CRUDPage(object entity)
{
InitializeComponent();
var type = typeof(FormGenerator<>).MakeGenericType(new [] { typeof(entity) });
var instance = Activator.CreateInstance(type);
Content = instance.GetType().GetMethod("GenerateForm").Invoke(instance, new[] { entity });
}
请注意,这比使用真正的泛型慢得多。