我知道问题所在,但找不到解决方案。我如何创建这样的结构。正确的方法是什么?

public class BuildingListPageViewModel : ListPageViewModel<BuildingItemViewModel>
{
}

public interface ItemViewModel<T> where T:IEntity
{
    T Model { get; set; }
}

public abstract class ListPageViewModel<TVm> : PageViewModel where TVm : ItemViewModel<IEntity>
{
}


public class BuildingItemViewModel : ItemViewModel<Building>
{
}

public partial class Building : IEntity
{
    public int Id;
}


它给出了BuildingItemViewModel不能用作通用类型或方法TVm中的类型参数ListPageViewModel<TVm>的情况。没有从BuildingItemViewModelItemViewModel<IEntity>的隐式引用转换错误。

最佳答案

您需要ListPageViewModel上的第二个通用参数:

public abstract class ListPageViewModel<TVm, TModel>
    where TVm : ItemViewModel<TModel>
    where TModel : IEntity
{
}


然后声明同时指定了ListPageViewModelTVm的,从TModel派生的类:

public class BuildingListPageViewModel
    : ListPageViewModel<BuildingItemViewModel, Building>
{
}

10-04 11:30