Для краткости в моем коде я хотел бы иметь возможность сделать следующее: имея коллекцию, найдите первый элемент, соответствующий выражению лямбда; если он существует, верните значение свойства или функции. Если он не существует, верните null.
Обновленные примеры w. классы
Пусть есть набор материалов
class Stuff
{
public int Id { get; set; }
public string Value { get; set; }
public DateTime? ExecutionTime { get; set; }
}
То, на что я нацеливаюсь, - это способ хорошо вернуться при вызове этого
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;
Возможно ли это с некоторым linq-синтаксисом-fu или мне нужно явно проверить возвращаемое значение?
Исходный пример w. строки
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();
Комментарий: Я не должен был использовать строки в моем исходном примере, так как он слегка искажает вопрос, центрируя его по методу ToUpper и классу строк. Пожалуйста, рассмотрите обновленный пример