Кортеж в аргументе

Кортеж — способ передать несколько связанных значений одним аргументом без создания отдельного класса.

// обычные аргументы — три отдельных параметра
void FindElement(string tag, string attribute, string value)
 
// кортеж — один параметр из трёх значений
void FindElement((string tag, string attribute, string value) selector)

Зачем это нужно

Если несколько значений всегда ходят вместе — кортеж делает сигнатуру функции понятнее и позволяет передавать этот набор как одну переменную.

Практика: ожидание и клик по кнопке

void WaitAndClick((string tag, string attribute, string value) selector)
{
    int retries = 30;
    while (instance.ActiveTab.FindElementByAttribute(
               selector.tag, selector.attribute, selector.value, "regexp", 0).IsVoid
           && retries > 0)
    {
        retries--;
        Thread.Sleep(1000);
    }
 
    var el = instance.ActiveTab.FindElementByAttribute(
        selector.tag, selector.attribute, selector.value, "regexp", 0);
 
    if (el.IsVoid)
        throw new Exception($"Элемент не найден: {selector.tag} {selector.attribute}={selector.value}");
 
    el.RiseEvent("click", instance.EmulationLevel);
}

Вызов — кортеж передаётся в скобках:

WaitAndClick(("button", "innertext", "I\\ already\\ have\\ an\\ address"));
WaitAndClick(("button", "innertext", "Create\\ a\\ new\\ wallet"));
WaitAndClick(("button", "innertext", "I\\ agree"));

Три разные кнопки — три строки вместо трёх копий одного и того же кода.