gpt4 book ai didi

c# - 使用继承时的 "does not implement interface member"错误

转载 作者:太空宇宙 更新时间:2023-11-03 21:08:10 24 4
gpt4 key购买 nike

我有这两个接口(interface):

public interface IFilterHelper<T>
{
void Filter(ISearchModel<T> model, ref IQueryable<T> dbModel);
}

public interface ISearchModel<T>
{
IQueryable<T> GetDBModel(DbContext db);
}

还有这两个实现

public class UserSearchModel : ISearchModel<ApplicationUser>
{
public IQueryable<ApplicationUser> GetDBModel(DbContext db)
{
return db.Users.Where(u => true); //something like this
}
}

public class UserFilterHelper : IFilterHelper<ApplicationUser>
{
public void Filter(UserSearchModel model, ref IQueryable<ApplicationUser> dbModel)
{
}
}

但是我收到错误 'UserFilterHelper' does not implement interface member 'IFilterHelper<ApplicationUser>.Filter(ISearchModel<ApplicationUser>, ref IQueryable<ApplicationUser>)'

但是当我改变UserSearchModelISearchModel<ApplicationUser> ,它编译成功。我知道我可以转换它并让它工作,但为什么它会给我那个错误。如您所见UserSearchModel类实现接口(interface) ISearchModel<ApplicationUser> .我错过了什么?

最佳答案

接口(interface)明确要求ISearchModel<ApplicationUser>即使UserSearchModel工具 ISearchModel<ApplicationUser>它不是唯一可以做到的。我可以创建一个类 SuperUserSearchModel这也将实现相同的接口(interface)。

所以试着写public void Filter(UserSearchModel model, ref IQueryable<ApplicationUser> dbModel)意味着您正在限制接口(interface)的实现。

要让它工作,你必须像这样设计你的界面:

public interface IFilterHelper<T, R> where R : ISearchModel<T>
{
void Filter(R model, ref IQueryable<T> dbModel);
}

public class UserFilterHelper : IFilterHelper<ApplicationUser, UserSearchModel>
{
public void Filter(UserSearchModel model, ref IQueryable<ApplicationUser> dbModel)
{
}
}

关于c# - 使用继承时的 "does not implement interface member"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39823543/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com