C#中三元运算符的异常行为

索菲亚·安提波利斯(Sophia Antipolis)
static void test(bool b)
{
    int i = 1; char c = (char)65;
    string s; if (b) s = "blubb" + i; else s = "blubb" + c;
    string t = "blubb" + (b ? i : c);
    Console.WriteLine(s + " == " + t);
}

调用test(true)给出“ blubb1 == blubb1”。

调用test(false)给出“ blubbA == blubb65”。

附加问题

编辑:

static void test(bool b)
{
    int i = 1; char c = (char)65;
    string s; if (b) s = "blubb" + i; else s = "blubb" + c;
    string t = "blubb" + (b ? i : c);
    string u = "blubb" + (b ? c : i);
    Console.WriteLine(s + " == " + t + " == " + u);
}

调用test(true)给出“ blubb1 == blubb1 == blubb65”。

调用test(false)给出“ blubbA == blubb65 == blubb1”。

是什么解释了这种意外行为?

什么时候我们

MSDN

condition ? first_expression : second_expression
... first_expressionsecond_expression
的类型必须相同,或者必须存在从一种类型到另一种类型的隐式转换。

由于在char之间int(但反之则是显式)之间进行了显式转换,因此以下调用的类型

boolean ? integer : character

int

当您将任何非字符串对象与字符串连接时,ToString()该对象上会被调用。


这表示:

  "string" + integer
= "string" + integer.ToString()

  "string" + character
= "string" + character.ToString()

最后

  "string" + (boolean ? integer : character)
= "string" + integerResult
= "string" + integerResult.ToString()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章