我过去几个月一直用c#编写代码,但每次连接时,我总是对逗号Int
和加号,
之间的区别感到困惑。有时+
用于连接,有时用,
。我真的不明白其中的区别。请帮帮我。
这是代码......
+
对不起,我正在处理这个程序有点不完整。
答案 0 :(得分:2)
在格式化字符串时,逗号用作分隔符,而加号用于常规连接。
格式化是您拥有{0}
和{1}
等占位符的位置。其他字符串(以逗号分隔)用于填充这些占位符。请注意,逗号不是运算符,仅用于分隔参数。这会输出Hello world!
:
string greet = "Hello";
Console.WriteLine("{0}{1}", greet, " world!");
Concantenation更直接。它只是按顺序组合字符串。相同的例子,但有连接:
string greet = "Hello";
Console.WriteLine(greet + " world!");
编辑:现在您已经包含了具体问题,可以尝试以下方法:
Console.WriteLine("Your id is: {0}" , id++);
答案 1 :(得分:0)
+
是“加法运算符”。对于数字,它会添加它们。对于日期和时间跨度,它会添加它们。对于字符串(文本) - 它加入它们,因为几乎没有任何其他意义上“添加”文本到文本。
此外,+
能够将非文本“添加”/“加入”/“连接”到文本,因此"mom" + 5
实际上会生成"mom5"
文本。但这是一个黑客。它在这种情况下的作用实际上是:
"mom" + (5).ToString()
所以它在整数5上调用“ToString()”,得到一个字符串“5”作为结果,并将两个文本一起添加/连接。通过这种方式,它可以向文本“添加”任何内容 - 它只是“串通”所有内容并在之后加入字符串。
现在,第二件事:
逗号永远不会像串联一样工作。周期。
逗号用于将参数传递给函数/方法。 WriteLine
是一种方法,需要一些参数。当您通过撰写method( )
来调用方法时,您可以在( )
内传递参数,即method( 5 )
或method( "foo" )
。如果有多个参数,那么它们必须用,
(逗号)分隔:method( 5, "foo", "bar")
,而并不意味着 5,foo和bar将是级联。它们将被传递给方法,该方法将用它们做点什么。
只有WriteLine
函数可以连接事物才会发生这种情况。您可以在MSDN或其他文档上阅读它的确切功能。简而言之,它需要所谓的“格式字符串”,然后是一些额外的参数,然后将额外的参数粘合到“格式字符串”中以构建结果。例如:
format: Hello {0}!
param1: Ted
code: WriteLine("Hello {0}!", "Ted");
result: Hello Ted!
format: Hello {0}!
param1: 12.36
code: WriteLine("Hello {0}!", 12.36);
result: Hello 12.36!
format: Hello {0} and {1}!
param1: John
param2: Bob
code: WriteLine("Hello {0} and {1}!", "John", "Bob");
result: Hello John and Bob!
code: WriteLine("I ate {0} {1} {2}!", 5, "bad", "bananas");
result: I ate 5 bad bananas!
{0} {1}等标记是..标记。它们表示将其中一个参数放入的位置。这种标记的通用名称是“占位符”。
WriteLine将文本直接写入控制台。更有用的类似函数是string.Format
。它的工作方式相同:采用一种格式,一些参数,构建一个结果并将其作为一个字符串返回,这样你就可以用它做一些事情,而不仅仅是将它转储到控制台。
检查。考虑一下,并考虑如何使用“+”编写它而不使用格式字符串:
WriteLine("Make me a Foo + {0} bars of {1}", 4 + 2, "goo");
扰流器:
method: WriteLine
number of params: 3
param1: "Make me a Foo + {0} bars of {1}" (formatstring)
params: 4 + 2 (== 6, goes as {0})
param3: "goo" (goes as {1})
result: Make me a Foo + 6 bars of goo
alternative way to get such text with extra parens for easier reading:
("Make me a Foo + ") + (4+2) + ("bars of ") + ("goo")
因此,替代代码将采用该公式并将其作为一个整体传递给WriteLine作为一个巨大的参数 - 总而言之,该公式生成一个现成的文本,我们需要只显示它,不需要格式化:
WriteLine( ("Make me a Foo + ") + (4+2) + ("bars of ") + ("goo") );
// or
WriteLine( "Make me a Foo + " + (4+2) + "bars of " + "goo" );
难以阅读,临时变量可能有所帮助:
string text = "Make me a Foo + " + (4+2) + "bars of " + "goo";
WriteLine( text );
现在,这只是WriteLine的一个参数。在这种情况下不需要逗号。
注意4 + 2必须在括号中,否则它将被粘在字符串中4然后是2,而不是4加2。可以自由尝试。
答案 2 :(得分:0)
正如其他人告诉您的那样,,
从未串联。但这是用来将参数传递给执行串联的函数的。
我从一位开发人员那里得到了同样的问题。经过一些讨论,我意识到他相信,
是在调用函数之前进行级联的,并且仅传递一个字符串作为参数。
他之所以这样做,只是因为他不知道可以构建接受可变数量参数的函数。
在这里您可以看到我如何使用params
关键字来告诉C#应该接受可变数量的字符串参数。这就是Console.WriteLine()的实际作用
// ConcatenateStrings("multiple", "strings", "are", "passed", "as", "parameters");
public string ConcatenateStrings(string firstString, params string[] restOfTheStrings)
{
// This code is an example only. It is not optimal
foreach(string oneString in restOfTheStrings)
{
firstString += oneString;
}
return firstString;
}