我想知道为什么在这样的场景中需要'+':
string name = "Rick";
Console.WriteLine("Hello, " + name);
我的印象是需要'+'来包含另一种类型的变量,并且可以包含一个没有一个字符串的字符串。这是不正确的吗?
此外,如果是这种情况,那么为什么它只是跳过变量而不会在这样的情况下返回错误:
string name = "Rick";
Console.WriteLine("Hello, " , name);
感谢。
答案 0 :(得分:3)
就编译器而言,第二个版本正在尝试传递第二个参数,WriteLine
方法没有为其重载。您真正拥有的选项如下
Console.WriteLine("Hello, " + name);
Console.WriteLine($"Hello, {name}");
Console.WriteLine(String.Format("Hello, {0}", name));
答案 1 :(得分:2)
C#使用运算符+
连接字符串。因此,一个字符串添加到另一个字符串,创建包含第一个和第二个字符串逗号不连接字符串,逗号分隔参数。
答案 2 :(得分:1)
第一个例子:
string name = "Rick"; //string variable
Console.WriteLine("Hello, " + name);
+
运算符用于连接字符串变量name
和字符串文字"Hello, "
的值。
结果输出为Hello, Rick
有关详情,请参阅:String Concatenation
第二个例子:
string name = "Rick";
Console.WriteLine("Hello, " , name);
匹配过载 Console.WriteLine(String, Object)
它需要使用格式化程序{0}
,因为格式化程序不存在第二个参数Object
(在您的情况下在变量name
中)不会发生任何事情。正确的版本将写为:
string name = "Rick";
Console.WriteLine("Hello, {0}", name);
该对象被强制转换为字符串并创建一个新的字符串,其值为name替换{0}
值。
写入屏幕的结果输出为:Hello, Rick
有关详细信息,我建议您查看以下内容:
答案 3 :(得分:1)
你感到困惑。在你的第一个例子中:
Console.WriteLine("Hello, " + name);
正在连接两个字符串,结果将作为参数传递给Console.WriteLine
方法。
第二个例子:
Console.WriteLine("Hello, " , name);
实际上是调用a different overload of that method,它接受一个字符串和一个对象。