考虑以下陈述:
StandardLookUpList analysisSport = lookupItem.Where(w => w.Code == Constants.Sport).FirstOrDefault();
代码将多次引用 analysisSport
,这个语句会被评估多次吗?
如果它会被评估多次,是否有办法使其只评估一次?
就像你可以使用 ToList()
立即且仅一次地评估LINQ一样。
考虑以下陈述:
StandardLookUpList analysisSport = lookupItem.Where(w => w.Code == Constants.Sport).FirstOrDefault();
代码将多次引用 analysisSport
,这个语句会被评估多次吗?
如果它会被评估多次,是否有办法使其只评估一次?
就像你可以使用 ToList()
立即且仅一次地评估LINQ一样。
FirstOrDefault
与 ToList
在枚举时仅枚举一次具有相同的效果。FirstOrDefault
返回具体对象(或者当然是 null),因此在这里没有任何东西来枚举。analysisSport
的子属性都是 IEnumerable
,根据它们的基础类型,它们可能会被多次枚举。.Where
会查找所有符合条件的元素,然后使用 .FirstOrDefault
返回从 .Where
获取的可枚举列表中的第一个元素,除非它为空,否则将返回 null。
执行该行代码后,不会再次评估它。
如果您想要再次评估它,您将需要重新设置它:
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();