我刚刚在一个源代码中看到类似这样的内容:
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 = "" +....
究竟是如何工作的。这些""
是什么用的?我尽可能地看着,但没有找到答案。
很抱歉,如果答案非常简单,我是编程新手,所以我将非常感谢您的理解。
答案 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,则替换空字符串。
因此+ operator
和string
之间的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 :)