我知道问题所在,但找不到解决方案。我怎样才能创建这样的结构。正确的做法是什么?
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>
{
}
关于c# - 泛型 - C# - 无隐式引用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301345/