Aşağıdaki uzantı yöntemi var:
public static IEnumerable<T> Apply<T>(
[NotNull] this IEnumerable<T> source,
[NotNull] Action<T> action)
where T : class
{
source.CheckArgumentNull("source");
action.CheckArgumentNull("action");
return source.ApplyIterator(action);
}
private static IEnumerable<T> ApplyIterator<T>(this IEnumerable<T> source, Action<T> action)
where T : class
{
foreach (var item in source)
{
action(item);
yield return item;
}
}
Diziyi döndürmeden önce her öğeye bir eylem uygular.
Pure
(Resharper ek açıklamalarından) özniteliğini bu yönteme uygulayıp uygulamadığımı merak ediyordum ve buna karşı ve ona karşı argümanlar görebiliyorum.
Artıları:
- kesinlikle bu konuşma olduğunu saf; bir sekansta çağırmak sekansı değiştirmez (yeni bir sekans döndürür) veya gözlemlenebilir bir durum değişikliği yapmaz
- sonucu kullanmadan çağırmak açıkça bir hatadır, çünkü dizi numaralandırılmadıkça hiçbir etkisi yoktur, bu yüzden Resharper'ın bunu yaparsam beni uyarmasını istiyorum.
Eksileri:
- olsa
Apply
yöntem kendisini saf, elde edilen sekansı numaralandırma olacaktır (yöntemin noktası olan) gözlemlenebilir durum değişiklik. Örneğin,items.Apply(i => i.Count++)
her numaralandırıldığında öğelerin değerlerini değiştirir. Saf niteliği uygulamak muhtemelen yanıltıcıdır ...
Ne düşünüyorsun? Özelliği uygulamalı mıyım, uygulamam mı?