using System.Collections.Generic;
public static class Extension
public static T FirstOrNew<T>(this IEnumerable<T> list) where T : new()
if (list == null) throw new ArgumentException("Value can't be null");
var enumerator = list.GetEnumerator();
return enumerator.MoveNext() ? enumerator.Current : new T();
public static void Main()
var list1 = new List<int> { 5 };
var result1 = list1.FirstOrNew();
var list2 = new List<int>();
var result2 = list2.FirstOrNew();
Console.WriteLine(result1);
Console.WriteLine(result2);