троичный оператор ||Предопределенный тип 'System.ValueTuple`3' не определен или не импортирован - PullRequest
0 голосов
/ 18 мая 2018
private void Disable_Proxy_textboxes(bool v)
{
    v = !v;
    address_textbox.Enabled = v;
    port_textbox.Enabled = v;
    port_label.ForeColor = Color.FromArgb(v?(255,255,255):(100, 100, 100));
    address_label.ForeColor=v?(Color.FromArgb(255,255,255)):(Color.FromArgb(100,100,100));
}

Во время кодирования я решил поиграть с троичными операторами, и теперь я действительно сбит с толку, почему в port_label.ForeColor = Color.FromArgb(v?(255,255,255):(100, 100, 100)); возникает ошибка.Я понимаю, что следующая строка очень правильная, но почему эта конкретная строка показывает следующие ошибки:

Predefined type 'System.ValueTuple`3' is not defined or imported
cannot convert from '(int, int, int)' to 'int'  

Документы просто говорят

Либо тип first_expression и second_expression должныбыть одинаковыми, или должно существовать неявное преобразование из одного типа в другой.

Так что, в моем случае, оба типа данных не одинаковы?Разве оба случая не совпадают с этим примером?

bool c=a?true:false;
a?(c=true):(c=false);

Что я не понимаю?Также, пожалуйста, это не одна из тех , почему этот код не работает , я не прошу здесь никакой отладки.Спасибо.

1 Ответ

0 голосов
/ 18 мая 2018

Проблема не в условном операторе, обе стороны имеют тип ValueTuple`3.Таким образом, условный оператор ? возвращает ValueTuple`3.

Но перегрузка Color.FromArgb не принимает ValueTuple`3 в качестве аргумента.

Компилятор недеконструируйте ValueTuple`3 по трем int аргументам для перегрузки, которую вы намереваетесь использовать.

...