Few days back me and one of my friend were looking at a peice of code written in C# language. A line of code which was using FirstOrDefault() extension method for IEnumerable
public string FirstName;
public string LastName;
public string USN;
static void Main(string args)
List<Student> studentList = new List<Student>();
Student student = studentList.FirstOrDefault();
/*line 3*/string name = student.FirstName;
The code in the line 3 code got the attention and I said NullReferenceException will be thrown as Student being reference type whose default value will be null. For this my friend said NO, FirstOrDefault() will get the empty instance value which will not be null, so there will be no exception. To prove him wrong I had to execute the above C# code and show the below exception.
The method FirstOrDefault<TSource> will return the default of TSource when IEnumerable collection is empty. Here TSource can either be a value type or reference type.
- If TSource is a reference type (e.g, Class), then its default value is null.
- If TSource is a value type then it will return the default value which is not null. F.g, if TSource is a integer then default value will be 0.
To verify the default value you can use default(TSource) construct as shown below.
// reference type Student is null.
// Will print 0