Deshabilitar de forma segura la llamada a FirstOrDefault en Linq c #

Para mayor brevedad en mi código, me gustaría poder hacer lo siguiente: tener una colección, encontrar el primer elemento que coincida con una expresión lambda; si existe, devuelve el valor de una propiedad o función. Si no existe, devuelve nulo.

Ejemplos actualizados w. clases

Vamos a tener una colección de cosas

class Stuff
{
    public int Id { get; set; }
    public string Value { get; set; }
    public DateTime? ExecutionTime { get; set; }
}

Lo que busco es una forma de regresar bien cuando llame a este

var list = new Stuff[] { new Stuff() { Id = 1, Value = "label", ExecutionTime = DateTime.Now } };

// would return the value of ExecutionTime for the element in the list
var ExistingTime = list.FirstOrDefault(s => s.Value.Contains("ab")).ExecutionTime;

// would return null
var NotExistingTime = list.FirstOrDefault(s => s.Value.Contains("zzz")).ExecutionTime; 

¿Es posible con algunos linq-syntax-fu o tengo que verificar explícitamente el valor de retorno antes de continuar?

Ejemplo original w. instrumentos de cuerda

var stuff = {"I", "am", "many", "strings", "obviously"};

// would return "OBVIOUSLY"
var UpperValueOfAString = stuff.FirstOrDefault(s => s.contains("bvi")).ToUpper();

// would return null
var UpperValueOfAStringWannabe = stuff.FirstOrDefault(s => s.contains("unknown token")).ToUpper();

Comentario: No debería haber usado cadenas en mi ejemplo original, ya que desvía ligeramente la pregunta centrándola en el método ToUpper y la clase de cadena. Por favor considere el ejemplo actualizado

Respuestas a la pregunta(3)

Su respuesta a la pregunta