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

C# 为什么逗号不能在WriteLine中包含字符串?,c#,string,console.writeline,C#,String,Console.writeline,我想知道为什么在这样的场景中需要“+”: string name = "Rick"; Console.WriteLine("Hello, " + name); string name = "Rick"; Console.WriteLine("Hello, " , name); 我的印象是,“+”需要包含另一种类型的变量,而字符串可以不包含。这是不对的吗 此外,如果是这种情况,那么为什么它只是跳过变量,而在这种情况下不返回错误: string name = "Rick"; Console.Wr

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

string name = "Rick";
Console.WriteLine("Hello, " + name);
string name = "Rick";
Console.WriteLine("Hello, " , name);
我的印象是,“+”需要包含另一种类型的变量,而字符串可以不包含。这是不对的吗

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

string name = "Rick";
Console.WriteLine("Hello, " + name);
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 name = "Rick";
Console.WriteLine("Hello, " , name);
Console.WriteLine("Hello, " , name);
匹配重载

它需要使用格式化程序
{0}
,因为格式化程序不存在,第二个参数
对象
(在变量
名称
中)不会发生任何事情。正确的版本应写为:

string name=“Rick”;
WriteLine(“Hello,{0}”,name)

对象被强制转换为字符串,并创建一个新字符串,其值为name,替换
{0}
值。
写入屏幕的结果输出将是:
Hello,Rick

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

  • 你弄糊涂了。在您的第一个示例中:

    Console.WriteLine("Hello, " + name);
    
    这两个字符串被连接起来,结果作为参数传递给
    控制台.WriteLine
    方法


    第二个例子:

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

    实际上是调用,它接受字符串和对象。

    Console.WriteLine(“Hello,{0}”,name)
    WriteLine()
    确实有一个适当的重载,调用
    Format()
    是不必要的,你是对的,尽管OP似乎不确定字符串连接,因此可能值得将其保留,以防他不知道它的存在:)谢谢。我很困惑,因为我记得前面使用了您的第三个示例,但忘记了所需的{#}。