Mặc dù bạn chắc chắn có thể xây dựng một thiết bị như vậy từ các toán tử trình tự hiện có, nhưng trong trường hợp này, tôi sẽ có xu hướng viết thiết bị này như một toán tử trình tự tùy chỉnh. Cái gì đó như:
// 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;
}
Điều đó khá rõ ràng, ngắn gọn, bao hàm tất cả các trường hợp và không tạo thêm các lần lặp lại của trình tự một cách không cần thiết.
Việc biến điều này thành một phương pháp chung hoạt động IEnumerable<T>
được để lại như một bài tập. :-)