将 Class<Object> 转换为 Class<Interface>
Convert Class<Object> to Class<Interface>
我有一个 class Dog
实现接口 IAnimal
和一个 IDbSet<Dog> DogSet
.
我有以下原型:MyMethod(IDbSet<IAnimal> AnimalSet)
尝试执行 MyMethod(DogSet);
时我在编译时遇到错误,提示无法将 IDbSet<Dog>
显式转换为 IDbSet<IAnimal>
如果我尝试使用 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>){ }
}
通过将 generic constraints 设置为需要 class 实现接口 IAnimal,您应该能够做到这一点:
public void MyMethod<T>(DbSet<T> animals) where T : class, IAnimal
{
...
}
...并调用为:
MyMethod(DogSet);
我有一个 class Dog
实现接口 IAnimal
和一个 IDbSet<Dog> DogSet
.
我有以下原型:MyMethod(IDbSet<IAnimal> AnimalSet)
尝试执行 MyMethod(DogSet);
时我在编译时遇到错误,提示无法将 IDbSet<Dog>
显式转换为 IDbSet<IAnimal>
如果我尝试使用 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>){ }
}
通过将 generic constraints 设置为需要 class 实现接口 IAnimal,您应该能够做到这一点:
public void MyMethod<T>(DbSet<T> animals) where T : class, IAnimal
{
...
}
...并调用为:
MyMethod(DogSet);