Надявах се някой да може да ми обясни какво лошо нещо може да се случи в този код, което кара ReSharper да даде предупреждение „Достъп до модифицирано затваряне“:
bool result = true;
foreach (string key in keys.TakeWhile(key => result))
{
result = result && ContainsKey(key);
}
return result;
Дори кодът по-горе да изглежда безопасен, какви лоши неща могат да се случат в други случаи на „модифицирано затваряне“? Често виждам това предупреждение в резултат на използване на LINQ заявки и съм склонен да го игнорирам, защото не знам какво може да се обърка. ReSharper се опитва да реши проблема, като направи втора променлива, която ми се струва безсмислена, напр. той променя foreach
реда по-горе на:
bool result1 = result;
foreach (string key in keys.TakeWhile(key => result1))
Актуализация: като странична бележка, очевидно цялата част от кода може да бъде преобразувана в следния израз, което не води до модифицирани предупреждения за затваряне:
return keys.Aggregate(
true,
(current, key) => current && ContainsKey(key)
);
result &= ContainsKey(key);
, ако желаете. - person ChaosPandion   schedule 01.06.2010bool
? - person Sarah Vessels   schedule 01.06.2010result &&= ContainsKey(key);
- person SLaks   schedule 01.06.2010