我写了下面的代码:
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/