为索引字符串时,为什么C#会返回Char对象?

时间:2016-07-20 19:51:47

标签: c# string char

我想知道为什么当我索引到这样的字符串时C#不会只返回一个字符串:

string x = "xyz";
var c = x[0]

4 个答案:

答案 0 :(得分:9)

字符串由字符组成。如果您正在访问单个元素,就像使用索引运算符一样,为什么要返回一个字符串?

如果要返回字符串,可能需要使用Substring

答案 1 :(得分:3)

String是一个类,它接受一个char数组来自己初始化,所以当你尝试在某个索引处获取元素时,它返回char。 检查字符串类enter image description here

另见String类声明。

public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>, IEnumerable<char>, IEnumerable, IEquatable<string>

IEnumerable<char>继承。

在字符串类中有一个get属性,它在传递索引时返回char,请参见图像。这清楚地说明了在当前System.String

中的指定位置获取System.Char对象

enter image description here

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 ()方法)的字符串实现,但是其他人可能会想知道为什么它被实现为这一点。