C# 设置presenter属性抛出';不能用作类型参数';例外

C# 设置presenter属性抛出';不能用作类型参数';例外,c#,presenter,C#,Presenter,以下是我的演示者课程: public class ListPresenter<TViewInterface, TContext> : Presenter<TViewInterface, TContext> where TViewInterface : IContextView<TContext>, IListView where TContext : IObservableObject { protected over

以下是我的演示者课程:

public class ListPresenter<TViewInterface, TContext> : Presenter<TViewInterface, TContext>
        where TViewInterface : IContextView<TContext>, IListView
        where TContext : IObservableObject
{
     protected override void OnInitializePresentationComplete(dynamic data)
     {
    View.ViewPresenter = (ListPresenter<TViewInterface, TContext>)this;
     }
}
公共类列表演示者:演示者
其中TVIEWENTERFACE:IContextView,IListView
其中TContext:IObservableObject
{
受保护的覆盖无效OnInitializePresentationComplete(动态数据)
{
View.ViewPresenter=(ListPresenter)这个;
}
}
以下是我在视图中定义属性的方式:

public ListPresenter<IListView, IObservableObject> ViewPresenter { get; set; }
public ListPresenter ViewPresenter{get;set;}
ViewPresenter属性上引发的编译时异常是“类型IListView不能用作泛型类型或方法
ListPresenter
中的类型参数TViewInterface。没有从IListView到
IContextview
的隐式引用转换


我是否对ViewPresenter的定义不正确?或者我是否对其进行了正确的强制转换?或者两者都正确?

我认为这与您的通用where约束有关。您将TVIEWENTERFACE限制为TContext的IContextView和IListView,但这并不意味着IListView是TContext的IContextView,只是您使用的任何类型都是两者…然后错误清楚地表明您正在尝试将IListView用作TViewInterface类型,但由于它没有实现IContextView接口,因此失败。

我想我理解,谢谢。因此,如果我真正想要的是访问列表演示器中的方法(或者,更确切地说,从基本列表presenter继承的特定子presenter)我需要创建一个接口来定义这种特定类型的presenter,即IListPresenter。因此,我的类的顶行现在是:public class ListPresenter:presenter,IListPresenter,现在我可以存储接口:View.ViewPresenter=(IListPresenter)这