| 0 values | 1 value | > 1 value
FirstOrDefault | Default | First value | First value
SingleOrDefault | Default | First value | Exception
And to extend this table to the entire set:
| 0 values | 1 value | > 1 value
First | Exception | First value | First value
FirstOrDefault | Default | First value | First value
Single | Exception | First value | Exception
SingleOrDefault | Default | First value | Exception
Last | Exception | Last value | Last value
LastOrDefault | Default | Last value | Last value
And here's another version with some concrete values to make it clearer:
| [] | [1] | [1,2,3]
First | Exception | 1 | 1
FirstOrDefault | 0 | 1 | 1
Single | Exception | 1 | Exception
SingleOrDefault | 0 | 1 | Exception
Last | Exception | 1 | 3
LastOrDefault | 0 | 1 | 3