我需要一种通过表单名称返回表单新实例的方法。这是我到目前为止的内容:

    public Form GetFormByName(string frmname)
    {
        return Assembly.GetExecutingAssembly().GetTypes().Where(a => a.BaseType == typeof(Form) &&
            a.Name == frmname).Cast<Form>().FirstOrDefault();
    }


但是,当我尝试执行此代码时,出现以下错误:

无法将类型为“ System.RuntimeType”的对象转换为类型为“ System.Windows.Forms.Form”的对象。

这个错误是什么意思?

最佳答案

您需要Activator.CreateInstance方法,该方法创建给定Type的类型的实例:

public Form TryGetFormByName(string frmname)
{
    var formType = Assembly.GetExecutingAssembly().GetTypes()
        .Where(a => a.BaseType == typeof(Form) && a.Name == frmname)
        .FirstOrDefault();

    if (formType == null) // If there is no form with the given frmname
        return null;

    return (Form)Activator.CreateInstance(formType);
}

10-05 22:53