c# - 泛型 - C# - 无隐式引用转换

标签 c# generics

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

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 派生的类,同时指定了 TVmTModel:

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

关于c# - 泛型 - C# - 无隐式引用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25301345/

相关文章:

c# - 什么是 C# 检查的 C++ 等价物

java - 具有可变数量的方法引用的通用对象比较方法用于比较

c# - 派生类上没有扩展方法 'First'

java - 通用方法 T 扩展

java - 我们如何在 Java 中使用泛型类型和基元

C# 多个项目引用同一个 dll - 更新 dll 的简单方法是什么?

c# - 可空类型和三元运算符 : why is `? 10 : null` forbidden?

c# - 是否可以在 C# 中创建固定指针?

c# - NHibernate 如何确定是插入还是更新记录?

java - Eclipse 警告 - 类是原始类型。对泛型类型 Class<T> 的引用应该被参数化