Это полезно для декларативного изложения
Мне нужен один элемент в списке, и если более одного элемента совпадают, значит что-то не так
Во многих случаях программы должны свести набор элементов к интересному на основе определенного предиката. Если более одного совпадения, это указывает на ошибку в программе. Без метода Single
программа должна была бы обходить части потенциально дорогого списка более одного раза.
Сравните
Item i = someCollection.Single(thePredicate);
К
Contract.Requires(someCollection.Where(thePredicate).Count() == 1);
Item i = someCollection.First(thePredicate);
Последний требует двух операторов и дважды повторяет потенциально дорогой список. Нехорошо.
Примечание: Да First
на потенциально быстрее, потому что он должен выполнять итерацию только до первого соответствующего элемента. Остальные элементы не имеют никакого значения. С другой стороны, Single
должен учитывать все перечисление. Если несколько совпадений не имеют значения для вашей программы и указывают на отсутствие ошибок программирования, тогда да, используйте First
.