三元运算符||未定义或导入预定义类型'System.ValueTuple`3'

时间:2018-05-18 16:34:45

标签: c# ternary-operator argb

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 :(得分:3)

问题不在于条件运算符,双方都是ValueTuple`3类型。因此条件运算符?返回ValueTuple`3

Color.FromArgb的重载没有ValueTuple`3作为参数。

编译器不会将ValueTuple`3解构为您打算使用的重载的三个int参数。