我只是想确认一下:
string x = "";
char Char = x[0]; // throws exception: "Index was outside the bounds of the array"
这意味着字符串实际上被视为字符数组,对吗?(至少在内部是这样的。)
你可能会发现这个MSDN文档有帮助。
简而言之,字符串是“作为Char对象的顺序只读集合存储的”
是的,它可以像char数组一样访问。因此,如果X包含除String.Empty以外的值,则char Char=X[0];
代码将返回字符串的第一个字符。
C#只是一种编程语言。在 .Net 框架的 BCL 中,字符串关键字是 System.String 的别名。可以非常安全地假设,在内部 String 是一个字符数组。来自 MSDN 的描述:
字符串是用于表示文本的 Unicode 字符序列。String 对象是表示字符串的 System.Char 对象的顺序集合。
这取决于你所说的“数组”的含义。
如果你指的是一般计算概念中的随机访问、固定长度、整数可索引对象集合,那么字符串可以被认为是完全像那样的。 (一般计算概念通常包括在内存中连续,但除了在不安全代码中使用指针等少数情况外,在C#方面并没有太多意义)。
如果你指的是语言定义的C#实现这个概念,char[]
,那么实际上两者是不同的东西。
实际上,System.String
确实被实现为一个char
数组,但它不一定非得这样。
除了语言细节之外,实际应用:
如果您想对字符串执行与char[]
相同的操作,则通常可以使用此方法(尤其是,字符串是只读的),并且往往是最有效的方法,只要概念上非常简单。特别是,使用foreach
和使用在0
和str.Length - 1
之间移动的索引效果很好。同样,许多可以在char[]
上执行的操作也可以在string
上执行,例如CopyTo()
和强制转换为IEnumerable<char>
。ToCharArray()
。