我刚刚在一个源代码中看到这样的事情:
char[] letters = { 'k', 'n', 'p', 's' };
for (int d1 = 0; d1 < letters.Length; d1++)
{
for (int d2 = 0; d2 < letters.Length; d2++)
{
for (int d3 = 0; d3 < letters.Length; d3++)
{
for (int d4 = 0; d4 < letters.Length; d4++)
{
string left = ""+ letters[d1] + letters[d2] + letters[d3] + letters[d4];
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我真正想知道的是这究竟是多么string strName = "" +....有效.这些是""为了什么?我尽可能地看着,但没有找到答案.很抱歉,如果答案非常简单,我是编程新手,所以我将非常感谢您的理解.
在C#语言规范的某个地方(我认为是7.8.4)写的:
字符串连接:
string operator +(string x,string y);
string operator +(string x,object y);
string operator +(object x,string y);
二进制+运算符的这些重载执行字符串连接.如果字符串连接的操作数为null,则替换空字符串.否则,通过调用从类型对象继承的虚拟ToString方法,将任何非字符串参数转换为其字符串表示形式.如果ToString返回null,则替换空字符串.
所以+ operatora string和a 之间char转换char为a string(通过.ToString()char 的方法)并连接两者.
例如:
char ch = 'x';
string str = "" + ch;
Run Code Online (Sandbox Code Playgroud)
被"转换"为
string str = "" + ch.ToString();
Run Code Online (Sandbox Code Playgroud)
这里ch.ToString()是"x" (用双引号,这样一string)
最后"" + something是一种(安全)方式来调用.ToString()某些东西,这是安全的,因为它something == null通过不调用.ToString()和返回空字符串来处理这种情况.
在您的特定情况下,您可以看到这样的代码行:
string left = "" + letters[d1].ToString();
left = left + letters[d2].ToString();
left = left + letters[d3].ToString();
left = left + letters[d4].ToString();
Run Code Online (Sandbox Code Playgroud)
(事实上,如果我没记错的话,它会更复杂一些,因为C#编译器通过使用单个调用来优化多个字符串连接string.Concat,但这是一个实现细节,请参阅/sf/answers/20223941/)