和串联时有什么区别?

时间:2015-07-19 23:27:45

标签: c#

我过去几个月一直用c#编写代码,但每次连接时,我总是对逗号Int和加号,之间的区别感到困惑。有时+用于连接,有时用,。我真的不明白其中的区别。请帮帮我。

这是代码......

+

对不起,我正在处理这个程序有点不完整。

3 个答案:

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