【问题标题】:Setting presenter property throws 'cannot be used as type parameter' exception设置presenter属性抛出“不能用作类型参数”异常
【发布时间】:2013-06-17 20:43:09
【问题描述】:

这是我的演讲者课程:

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;
     }
}

这是我在视图中定义属性的方式:

public ListPresenter<IListView, IObservableObject> ViewPresenter { get; set; }

ViewPresenter 属性上抛出的编译时异常是“类型 IListView 不能用作泛型类型或方法 ListPresenter&lt;TViewInterface, TContect&gt; 中的类型参数 TViewInterface。没有从 IListView 到 IContextview&lt;IObservableObject&gt; 的隐式引用转换。

我是否错误地定义了 ViewPresenter?还是我没有正确投射?还是两者兼有?

【问题讨论】:

    标签: c# presenter


    【解决方案1】:

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

    【讨论】:

    • 我想我明白了,谢谢。因此,如果我真正想要的是访问列表演示者中的方法(或者,更确切地说,来自那些从基本列表演示者继承的特定子演示者),我需要创建一个接口来定义这种特定类型的演示者,即 IListPresenter。
    • 所以我班级的第一行现在是: public class ListPresenter : Presenter, IListPresenter
    • 现在我可以存储界面了:View.ViewPresenter = (IListPresenter)this;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2016-07-10
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    相关资源
    最近更新 更多