从char数组到字符串C#的特定(精确)字符

Kad*_*ski 3 c#

我刚刚在一个源代码中看到这样的事情:

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 = "" +....有效.这些是""为了什么?我尽可能地看着,但没有找到答案.很抱歉,如果答案非常简单,我是编程新手,所以我将非常感谢您的理解.

xan*_*tos 5

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/)