繁体   English   中英

转换类别 <Object> 上课 <Interface>

[英]Convert Class<Object> to Class<Interface>

我有一个类Dog实现接口IAnimalIDbSet<Dog> DogSet

我有以下原型: MyMethod(IDbSet<IAnimal> AnimalSet)

尝试执行MyMethod(DogSet); 我在编译时遇到错误,说无法将IDbSet<Dog>显式IDbSet<Dog>IDbSet<IAnimal>

如果我尝试使用MyMethod((IDbSet<IAnimal>)DogSet) ,则在运行时会出错,因为它无法MyMethod((IDbSet<IAnimal>)DogSet)转换。

自从Dog实现IAnimal以来,为什么不能投射它?

代码:

public interface IAnimal{
    public String Libelle { get; }
}

public partial class Dog : IAnimal{
    public String Libelle {
        get {
            return "Hello World";
        }
    }
}

// Can't convert from 'System.Data.Entity.IDbset<Models.Dog>' to 'System.Data.Entity.IDbSet<Interfaces.IAnimal>'
public abstract MyClass : MyAbstractClass{
    public MyClass(IModel dbContext) : base(dbContext, dbContext.DOG_IDBSET) { }
}

public abstract class MyAbstractClass{
    public MyAbstractClass(Imodel dbContext, IDbSet<IAnimal>){ }
}

修改后的代码:

// Can't convert from 'System.Data.Entity.IDbset<Models.Dog>' to 'System.Data.Entity.IDbSet<T>'
public abstract MyClass<T> : MyAbstractClass<T> where T : Dog, IAnimal
{
    public MyClass(IModel dbContext) : base(dbContext, dbContext.DOG_IDBSET) { }
}

public abstract class MyAbstractClass<T> where T : Dog, IAnimal
{
    public MyAbstractClass(Imodel dbContext, IDbSet<T>){ }
}

通过设置通用约束以要求一个实现接口IAnimal的类,您应该能够做到这一点:

public void MyMethod<T>(DbSet<T> animals) where T : class, IAnimal
{
    ...
}

...并致电为:

MyMethod(DogSet);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM