【问题标题】:ternary operator || Predefined type 'System.ValueTuple`3' is not defined or imported三元运算符 ||未定义或导入预定义类型“System.ValueTuple`3”
【发布时间】:2018-05-18 16:34:44
【问题描述】:
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);

我不明白的是什么。也请这不是那些为什么这段代码不起作用之一,我不是在这里要求任何调试。谢谢。

【问题讨论】:

    标签: c# ternary-operator argb


    【解决方案1】:

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

    Color.FromArgb 的重载不会将ValueTuple`3 作为参数。

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

    【讨论】:

    • 好吧,我明白了。 Color.FromArgb 不接受 ValueTuple`3 类型的值,因为 Color.FromArgb=ValueTuple`3 完全无效。它将ValueTuple`3 作为参数,这在该行中存在错误,但在下一行中没有。我做对了吗?初学者。
    • @Rishav 是的,在下一行中,您的条件运算符返回一个Color(因为双方都调用Color.FromArgb())并将其分配给ForeColor。在第一行中,您尝试使用ValueTuple`3 调用FromArgb(),这会导致错误。
    猜你喜欢
    • 2016-11-17
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    • 2015-09-22
    相关资源
    最近更新 更多