我有以下课程
public abstract class BaseViewPresenter { }
public abstract class BaseView<T> : UserControl
where T : BaseViewPresenter { }
public class LoginPresenter : BaseViewPresenter { }
public partial class LoginView : BaseView<LoginPresenter> { }
我有一个看起来像这样的方法(简化)
public BaseView<BaseViewPresenter> Resolve(BaseViewPresenter model)
{
var type = model.GetType();
var viewType = _dataTemplates[type];
// Correctly creates BaseView object
var control = Activator.CreateInstance(viewType);
// Fails to cast as BaseView<BaseViewPresenter> so returns null
return control as BaseView<BaseViewPresenter>;
}
当我使用LoginPresenter实例调用此函数时
var login = new LoginPresenter();
var ctl = Resolve(login);
该行Activator.CreateInstance(viewType)正确解析为我的新实例LoginView,但是control as BaseView<BaseViewPresenter>无法正确进行强制转换,因此返回null。
有没有一种方法可以正确地强制control转换为BaseView<BaseViewPresenter>不使用特定类型的泛型?
由于LoginView继承自BaseView<LoginPresenter>和LoginPresenter继承BaseViewPresenter,我假设有一种方法可以转换LoginView为BaseView<BaseViewPresenter>。
我坚持使用.Net 3.5
神不在的星期二
开心每一天1111