Дано:
class Program
{
private static readonly List<(int a, int b, int c)> Map = new List<(int a, int b, int c)>()
{
(1, 1, 2),
(1, 2, 3),
(2, 2, 4)
};
static void Main(string[] args)
{
var result = Map.FirstOrDefault(w => w.a == 4 && w.b == 4);
if (result == null)
Console.WriteLine("Not found");
else
Console.WriteLine("Found");
}
}
В приведенном выше примере ошибка компилятора встречается в строке if (result == null)
.
CS0019 Оператор '==' не может применяться к операндам типа '(int a, int b, int c)' и ''
Как я могу проверить, что кортеж найден до начала моей "найденной" логики?
До использования новых кортежей С# 7 у меня было бы следующее:
class Program
{
private static readonly List<Tuple<int, int, int>> Map = new List<Tuple<int, int, int>>()
{
new Tuple<int, int, int> (1, 1, 2),
new Tuple<int, int, int> (1, 2, 3),
new Tuple<int, int, int> (2, 2, 4)
};
static void Main(string[] args)
{
var result = Map.FirstOrDefault(w => w.Item1 == 4 && w.Item2 == 4);
if (result == null)
Console.WriteLine("Not found");
else
Console.WriteLine("Found");
}
}
Это сработало нормально. Мне нравится более легко интерпретируемое намерение нового синтаксиса, но я не уверен, как его проверить, прежде чем действовать на то, что было найдено (или нет).