我想知道为什么当我索引到这样的字符串时C#不会只返回一个字符串:
string x = "xyz";
var c = x[0]
答案 0 :(得分:9)
字符串由字符组成。如果您正在访问单个元素,就像使用索引运算符一样,为什么要返回一个字符串?
如果要返回字符串,可能需要使用Substring。
答案 1 :(得分:3)
String是一个类,它接受一个char数组来自己初始化,所以当你尝试在某个索引处获取元素时,它返回char。 检查字符串类
另见String类声明。
public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>
由IEnumerable<char>
继承。
在字符串类中有一个get属性,它在传递索引时返回char,请参见图像。这清楚地说明了在当前System.String
中的指定位置获取System.Char对象public char this[int index] { get; }
答案 2 :(得分:3)
根据MSDN:
A String
将文本表示为UTF-16代码单元序列。
A Char
将字符表示为UTF-16代码单元。
如果你索引到string
(一系列UTF-16代码单元),你会得到一个char
(一个UTF-16代码单元),这似乎很自然。
答案 3 :(得分:1)
我不同意答案和评论,说明返回char
是很自然的。不,根据定义,c#中的字符串不是 char
的数组(请参阅first answer to the duplicate,它是它自己的一类。
返回char
的唯一原因是c#团队决定以这种方式实现它。我不知道他们是否有更长时间的讨论或根本没有讨论。但我想这个实现的原因是C#或多或少是c / c ++的继承者。并且c / c ++开发人员已经高度习惯了这种字符串的心理模型。
我很少在c#中使用char
类型,并猜测我可以很好地使用索引器返回字符串(可能还有一些GetCharAt ()
方法)的字符串实现,但是其他人可能会想知道为什么它被实现为这一点。