Итак, я знаю, что Find()
- это всего лишь List<T>
метод, тогда как First()
- это расширение для любого IEnumerable<T>
. Я также знаю, что First()
вернет первый элемент, если не передан ни один параметр, тогда как Find()
выдаст исключение. Наконец, я знаю, что First()
сгенерирует исключение, если элемент не найден, тогда как Find()
вернет значение типа по умолчанию.
Надеюсь, это прояснит путаницу из-за того, что я на самом деле спрашиваю. Это вопрос информатики и касается этих методов на вычислительном уровне. Я понял, что расширения IEnumerable<T>
не всегда работают так, как можно было бы ожидать под капотом. Итак, вот вопрос, и я имею в виду с точки зрения «близко к металлу»: в чем разница между Find()
и First()
?
Вот некоторый код, обеспечивающий основные предположения для работы над этим вопросом.
var l = new List<int> { 1, 2, 3, 4, 5 };
var x = l.First(i => i == 3);
var y = l.Find(i => i == 3);
Существует ли какая-либо действительная вычислительная разница между тем, как First()
и Find()
обнаруживают свои значения в приведенном выше коде?
Примечание: давайте пока проигнорируем такие вещи, как AsParallel()
и AsQueryable()
.