다음과 같은 확장 방법이 있습니다.
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;
}
}
반환하기 전에 시퀀스의 각 항목에 동작을 적용합니다.
Pure
Resharper 주석 의 속성 을이 방법에 적용 해야하는지 궁금 하고 인수에 대한 인수를 볼 수 있습니다.
장점 :
- 엄격하게는, 말하기 입니다 순수; 시퀀스에서 호출하면 시퀀스가 변경되거나 (새 시퀀스가 반환 됨) 관찰 가능한 상태가 변경되지 않습니다.
- 시퀀스를 열거하지 않으면 효과가 없으므로 결과를 사용하지 않고 호출하는 것은 분명히 실수입니다. 따라서 Resharper에서 경고를 표시하고 싶습니다.
단점 :
Apply
메소드 자체가 순수 하더라도 결과 시퀀스 를 열거하면 관찰 가능한 상태 변경 (메소드의 포인트)이 변경됩니다. 예를 들어,items.Apply(i => i.Count++)
열거 될 때마다 항목의 값이 변경됩니다. 따라서 순수 속성을 적용하는 것은 아마도 잘못된 것입니다 ...
어떻게 생각해? 속성을 적용해야합니까?