我知道问题所在,但找不到解决方案。我如何创建这样的结构。正确的方法是什么?
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>
的情况。没有从BuildingItemViewModel
到ItemViewModel<IEntity>
的隐式引用转换错误。 最佳答案
您需要ListPageViewModel
上的第二个通用参数:
public abstract class ListPageViewModel<TVm, TModel>
where TVm : ItemViewModel<TModel>
where TModel : IEntity
{
}
然后声明同时指定了
ListPageViewModel
和TVm
的,从TModel
派生的类:public class BuildingListPageViewModel
: ListPageViewModel<BuildingItemViewModel, Building>
{
}