代码之家  ›  专栏  ›  技术社区  ›  paparazzo

第一次违约在林肯延期了吗?

  •  1
  • paparazzo  · 技术社区  · 6 年前

    请考虑以下声明:

    StandardLookUpList analysisSport = lookupItem.Where(w => w.Code == Constants.Sport).FirstOrDefault();
    

    代码将引用 analysisSport 不止一次。

    这句话会被多次评估吗?

    如果它将被评估一次以上是一种让它评估一次的方法?

    就像你能 ToList() 让LINQ立即评估一次。

    2 回复  |  直到 6 年前
        1
  •  3
  •   DavidG    6 年前

    FirstOrDefault 具有与 ToList 在一个可枚举的条件下,它只枚举一次。

    你唯一需要关心的是,当你有一个可枚举的时候,有趣的是!自从 第一次违约 返回一个具体的对象(当然也可以是空的),没有什么可枚举的。

    另一个潜在的陷阱是 analysisSport 那是 IEnumerable ,它们可能被枚举多次,具体取决于它们的基础类型。

        2
  •  1
  •   Matt D    6 年前

    .Where 将找到与约束匹配的所有元素,然后使用 .FirstOrDefault 它将返回可枚举列表中的第一个元素 。在哪里 ,除非它是空的,否则它将返回空值。

    不,在那一行代码被执行之后,它将不再被计算。 如果要重新计算,则必须重新设置:

    StandardLookUpList analysisSport = lookupItem.Where(w => w.Code == Constants.Sport).FirstOrDefault();
    
    // now changing the variable to show cars instead of sports
    analysisSport = lookupItem.Where(w => w.Code == Constants.Cars).FirstOrDefault();