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

C# 从字符数组到字符串C的特定(精确)字符#,c#,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++)

我刚刚在一个源代码中看到了如下内容:

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];
                }
           }
        }
    }
char[]字母={'k','n','p','s'};
对于(int d1=0;d1
我真正想知道的是,
字符串strName=“”+…
到底是如何工作的。这些
是做什么用的?我到处寻找,但没有找到答案。
很抱歉,如果答案很简单,我是编程新手,因此我将感谢您的理解。

简单:字母[I]是字符,将其转换为字符串“”将添加到表达式中

e、 g.
intx=5

  string str = ""+x;  // "5" as string.
char到string也是如此 :)

在(我想是7.8.4)的某个地方写着:

字符串连接:

字符串运算符+(字符串x,字符串y)

字符串运算符+(字符串x,对象y)

字符串运算符+(对象x,字符串y)

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

因此
字符串
字符
之间的
+运算符
字符
转换为
字符串
(通过字符的
.ToString()
方法)并将两者连接起来

例如:

char ch = 'x';

string str = "" + ch;
“转换”为

其中
ch.ToString()
“x”
(带双引号,因此是
字符串

最后,
“+something
是一种(安全的)调用
.ToString()
的方法,因为它通过不调用
.ToString()
并返回空字符串来处理
something==null
的情况

在您的特定情况下,您可以看到这行代码如下所示:

string left = "" + letters[d1].ToString();
left = left + letters[d2].ToString();
left = left + letters[d3].ToString();
left = left + letters[d4].ToString();

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

您已经得到了,但也许您应该尝试展开一点,解释为什么不能构建一个字符串,而只是将字符连接起来。我会记住这一点。:)是的,我做了数学题:D,但看起来很。。奇怪。有没有更正式的方式来说“嘿,你这个角色!进入那个字符串!”我发现了类似于
string someStr=string.Join(“,someCh[0],someCh[1],someCh[2]);)或者您可以使用String.Concat(字母[d1]+字母[d2]+字母[d3]+字母[d4]);太棒了,谢谢你!对于建议编辑的人来说,不,这是错误的。在
和第一个
字母[d1]
之间有一个明确的加法。那么编译器显然可以聪明地删除它,但它是存在的。
string left = "" + letters[d1].ToString();
left = left + letters[d2].ToString();
left = left + letters[d3].ToString();
left = left + letters[d4].ToString();