यद्यपि आप निश्चित रूप से मौजूदा अनुक्रम ऑपरेटरों से इस तरह के एक उपकरण का निर्माण कर सकते हैं, मैं इस मामले में एक कस्टम अनुक्रम ऑपरेटर के रूप में इसे लिखना चाहूंगा। कुछ इस तरह:
// Returns "other" if the list is empty.
// Returns "other" if the list is non-empty and there are two different elements.
// Returns the element of the list if it is non-empty and all elements are the same.
public static int Unanimous(this IEnumerable<int> sequence, int other)
{
int? first = null;
foreach(var item in sequence)
{
if (first == null)
first = item;
else if (first.Value != item)
return other;
}
return first ?? other;
}
यह बहुत स्पष्ट है, छोटा है, सभी मामलों को शामिल करता है, और अनावश्यक रूप से अनुक्रम के अतिरिक्त पुनरावृत्तियों का निर्माण नहीं करता है।
इसे एक सामान्य विधि में बनाना, जो काम करता है IEnumerable<T>
, एक अभ्यास के रूप में छोड़ दिया जाता है। :-)