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

时间:2016-04-01 20:24:12

标签: c# string console.writeline

我想知道为什么在这样的场景中需要'+':

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

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

此外,如果是这种情况,那么为什么它只是跳过变量而不会在这样的情况下返回错误:

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

感谢。

4 个答案:

答案 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

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

  • Console.WriteLine(String, Object)
  • String Concatenation
  • On String Formatters
  • Literals vs Variables
  • 答案 3 :(得分:1)

    你感到困惑。在你的第一个例子中:

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

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

    第二个例子:

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

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