मेरे पास निम्नलिखित एक्सटेंशन विधि है:
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
विशेषता (पुनर्वसन एनोटेशन से) लागू करना चाहिए , और मैं इसके लिए और इसके खिलाफ तर्क देख सकता हूं।
पेशेवरों:
- कडाई के साथ यह है शुद्ध; बस इसे एक अनुक्रम पर कॉल करने से अनुक्रम में बदलाव नहीं होता है (यह एक नया अनुक्रम देता है) या किसी भी अवलोकन स्थिति को बदल सकता है
- परिणाम का उपयोग किए बिना इसे कॉल करना स्पष्ट रूप से एक गलती है, क्योंकि इसका कोई प्रभाव नहीं है जब तक कि अनुक्रम की गणना नहीं की जाती है, इसलिए मैं चाहूंगा कि अगर मैं ऐसा करता हूं तो मुझे चेतावनी दें।
विपक्ष:
- भले ही
Apply
विधि ही शुद्ध है, गणना जिसके परिणामस्वरूप अनुक्रम जाएगा नमूदार राज्य परिवर्तन कर (जो विधि की बात है)। उदाहरण के लिए,items.Apply(i => i.Count++)
हर बार एन्यूमरेट किए गए आइटम के मूल्यों को बदल देगा। तो शुद्ध विशेषता को लागू करना शायद भ्रामक है ...
तुम क्या सोचते हो? क्या मुझे विशेषता को लागू करना चाहिए या नहीं?