Table of Contents

Marble diagram

If the sequence has no elements, FirstOrDefault will emit a default value before terminating successfully.

Tip

If you are interested in finding the first element that meets some criteria, consider using the Condition operator before FirstOrDefault.

Warning

There are subtle but important differences between using the FirstOrDefault operator and Take(1):

  • When the source sequence has no elements, Take(1) will complete successfully with no emitted values, while FirstOrDefault will emit a default value before terminating successfully.
  • When the source sequence emits the first element, Take(1) will immediately cancel the subscription to the source sequence before emitting the notification. FirstOrDefault, on the other hand, will emit the notification and only afterwards cancel the subscription to the source sequence.