我写了下面的代码:

IEnumerable<string> blackListCountriesCodes =
pair.Criterion.CountriesExceptions.Select(countryItem => countryItem.CountryCode);

IEnumerable<string> whiteListCountriesCodes =
pair.Criterion.Countries.Select(countryItem => countryItem.CountryCode);

return (!blackListCountriesCodes.Contains(Consts.ALL.ToString()) &&
        !blackListCountriesCodes.Contains(country) &&
        (whiteListCountriesCodes.Contains(Consts.ALL.ToString()) ||
        whiteListCountriesCodes.Contains(country)));

resharper向我显示警告:Possible duplicate enumeration of IEnumerable
这是什么意思?为什么这是警告?

最佳答案

LINQ查询将延迟执行,直到您对结果执行某些操作为止。在这种情况下,在同一集合上调用Contains()两次可能导致结果被枚举两次,这取决于查询,可能会导致性能问题。

您可以通过在查询末尾添加一个ToList()调用来解决此问题,这将强制执行查询并一次存储结果。

关于c# - IEnumerable的可能重复枚举,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13975535/

10-15 03:23