【问题标题】:C# lambda expression "type" confusionC# lambda 表达式 \"type\" 混淆
【发布时间】: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


    【解决方案1】:

    这些方法不是泛型的,它们只是返回一个泛型类型,所以你不能像它们一样调用它们。您可以指定 Lambda 的类型,例如:

    result = Read((tbl_usr_User usr) => usr.NAME == "John");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2018-09-11
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多