Согласно заголовку ... Есть ли реальная разница между list.First (), list.ElementAt (0) и list [0]?
Нет, разницы нет вообще. Все они делают одно и то же, возвращают первый элемент в списке.
РЕДАКТИРОВАТЬ: я думаю, я не должен сказать, что нет никакой разницы. ElementAt () и First () оба имеют некоторую обработку ошибок, которые они делают, проверяя нулевые значения и индексы вне диапазона, но на самом деле это не должно быть заметно.
Другим соображением при выборе между этими вариантами является то, что First()
и ElementAt(0)
оба совместимы с любой последовательностью - любой реализацией IEnumerable
. (Это может быть полезно, поскольку это означает, что вы можете поменять переменную с другой реализацией IEnumerable
без необходимости изменения какого-либо кода.) Напротив, индексатор работает только для списков и других структур, которые непосредственно реализуют эту функциональность.
И наоборот, использование индексатора может быть хорошим способом гарантировать (во время компиляции), что вы получаете оптимизированную производительность, поскольку ElementAt
имеет разумную вероятность быть O (n) вместо O (1) в то время как индексаторы обычно считаются быстрыми.