为什么逗号不能在 WriteLine 中包含字符串?

Why do commas not work to include strings in WriteLine?

我想知道为什么在这种情况下需要“+”:

string name = "Rick";
Console.WriteLine("Hello, " + name);

我的印象是需要“+”来包含另一种类型的变量,并且可以在没有字符串的情况下包含字符串。这不正确吗?

此外,如果是这种情况,那么为什么它只是跳过变量而不是 return 在这种情况下出现错误:

string name = "Rick";
Console.WriteLine("Hello, " , name);

谢谢。

C# 使用运算符 + 连接字符串。因此,一个字符串添加到另一个字符串创建包含第一个和第二个字符串的第三个字符串。逗号不连接字符串,逗号分隔参数。

就编译器而言,第二个版本试图传递第二个参数,WriteLine 方法没有为此重载。您真正拥有的选项如下

Console.WriteLine("Hello, " + name);
Console.WriteLine($"Hello, {name}");
Console.WriteLine(String.Format("Hello, {0}", name));

第一个例子:

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

有关更多信息,我建议您查看以下内容:

  • Console.WriteLine(String, Object)
  • String Concatenation
  • On String Formatters
  • Literals vs Variables
  • 你越来越糊涂了。在你的第一个例子中:

    Console.WriteLine("Hello, " + name);
    

    正在连接两个字符串,结果作为参数传递给 Console.WriteLine 方法。


    第二个例子:

    Console.WriteLine("Hello, " , name);
    

    实际上是在调用 a different overload of that method,它接受一个字符串和一个对象。