Не поймите исключение. Цель исключения - сообщить вам, что у вас есть ошибка, а не действовать как поток управления.
Довольно просто написать собственный метод расширения, который делает то, что вы хотите, поэтому сделайте это:
public static double? FirstOrNull(this IEnumerable<double> items)
{
foreach(double item in items)
return item;
return null;
}
Или, если вы хотите быть увлеченным этим:
public static T? FirstOrNull<T>(this IEnumerable<T> items) where T : struct
{
foreach(T item in items)
return item;
return null;
}
Имеет смысл?