【发布时间】:2022-10-07 22:32:56
【问题描述】:
在我正在研究的一个类中,我有三个名称相同但参数不同(重载)的方法。这三种方法之一是基类的覆盖。
这里的三个方法签名:
public override IQueryable<tbl_usr_User> Read(Expression<Func<tbl_usr_User, bool>> searchCriteria = null)
public IQueryable<tbl_usr_Company> Read(Expression<Func<tbl_usr_Company, bool>> searchCriteria = null)
public IQueryable<tbl_usr_Contact> Read(Expression<Func<tbl_usr_Contact, bool>> searchCriteria = null)
现在,当我想使用读取用户的 Read 方法时,我会这样做:
this.Read<tbl_usr_User>(usr => usr.NAME == "John");
因为我已经明确声明了返回类型,我希望该方法可以匹配正确的重载,但我发现事实并非如此,编译器错误地认为我会调用 Company 读取方法。 我发现让编译器相信我的意图的唯一方法是重写指令如下:
Expression<Func<tbl_usr_User, bool>> expression = user => user.NAME == "John";
result = this.Read(expression);
我在这里想念什么?没有一种简洁的方法来指示 lambda 类型而无需创建专用变量?
【问题讨论】:
标签: c# types pattern-matching overloading