如何获取类的类并在泛型函数中使用它?

时间:2017-01-23 17:53:15

标签: c# generics

我根据我提供的模型构建了一个为我创建表单的函数。

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本身不同。

如何获取对象的“类类型”以将其用作函数中的泛型类型?

2 个答案:

答案 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 });
}

请注意,这比使用真正的泛型慢得多。