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_expression和second_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] 删除。
我来说两句