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

时间:2015-04-19 12:36:55

标签: 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];
                }
           }
        }
    }

我真正想知道string strName = "" +....究竟是如何工作的。这些""是什么用的?我尽可能地看着,但没有找到答案。 很抱歉,如果答案非常简单,我是编程新手,所以我将非常感谢您的理解。

2 个答案:

答案 0 :(得分:5)

C# Language Specifications中的某个地方(我认为是7.8.4)写的是:

  

字符串连接:

     

string operator +(string x,string y);

     

string operator +(string x,object y);

     

string operator +(object x,string y);

     

binary +运算符的这些重载执行字符串连接。如果字符串连接的操作数为null,则替换空字符串。 否则,通过调用从类型对象继承的虚拟ToString方法,将任何非字符串参数转换为其字符串表示。如果ToString返回null,则替换空字符串。

因此+ operatorstring之间的char会将char转换为string(通过char的.ToString()方法并将两者连接起来。

例如:

char ch = 'x';

string str = "" + ch;

被“转换”为

string str = "" + ch.ToString();

其中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();

(事实上,如果我没记错的话,它会有点复杂,因为C#编译器通过使用string.Concat的单个调用来优化多个字符串连接,但这是一个实现细节,请参阅例如{ {3}})

答案 1 :(得分:3)

简单:letters [i]是一个char并将其强制转换为字符串“”被添加到表达式中。

e.g。 int x = 5;

  string str = ""+x;  // "5" as string.

同样适用于char到string :)