LINQ to Objects - ваш друг. Для первого:
bool allSameX = list.All(t => t.x == list[0].x);
Test firstTry = list.First(t => t.z == "try");
Test firstTryOrNull = list.FirstOrDefault(t => t.z == "try");
Первое зависит от того, есть ли хотя бы одно значение, конечно. Альтернативы могут быть:
bool allSameX = !list.Select(t => t.x)
.Distinct()
.Skip(1)
.Any();
Другими словами, после того, как вы прошли первое отличное значение x
, больше не должно быть. Одним приятным аспектом этого является то, что как только он обнаруживает второе отличное значение, он перестает смотреть - как и первая строка (версия All
), конечно.
LINQ удивительно гибок и заслуживает внимательного изучения.
РЕДАКТИРОВАТЬ: Если вам нужно выполнить последний тест («найти элемент с определенным значением для z») для нескольких различных значений, вам может потребоваться словарь или поиск, например,
// If there are duplicate z values
var lookup = list.ToLookup(t => t.z);
// If z values are distinct
var dictionary = list.ToDictionary(t => t.z);
Без некоторой предварительной обработки невозможно выполнить нужные запросы без итерации по крайней мере некоторых списка.