Uma opinião diferente sobre FirstOrDefault

O método de extensão IEnumerable FirstOrDefault não fez exatamente o que eu queria, então criei FirstOrValue. Esta é uma boa maneira de fazer isso ou há uma maneira melhor?

public static T FirstOrValue<T>(this IEnumerable<T> source, Func<T, bool> predicate, T value)
{
    T first = source.FirstOrDefault(predicate);
    return Equals(first, default(T)) ? value : first;
}

questionAnswers(4)

yourAnswerToTheQuestion