2

假设我想获取字符串中的第三个字母。

string s = "cats";

正如我在网上看到的大多数示例一样,使用 s[2] 获取值有什么区别:

char[] c = s.ToCharArray();
char x = c[2];
4

4 回答 4

8
  • 如果您需要特定索引处的字符,请使用"cats"[2]
  • 如果您需要将整个字符串作为 char 数组,请使用"cats".ToCharArray()
于 2013-01-18T21:11:35.687 回答
4

s[2]方法只是在该位置查找字符并返回它。

s.ToCharArray();方法分配一个新的char[],然后c[2]在数组中查找它。

如果您只需要一个字符,请使用该s[2]方法,因为该ToCharArray()方法很浪费。如果您需要将字符串中的所有字符作为 a ,char[]那么该ToCharArray()方法更简洁,可能更快(我没有做过任何基准测试,所以不要让我这样做)。

编辑

MS.NET 和 Mono 的实现都string.ToCharArray()使用不安全的代码来固定内部char和副本char[]并在指针上进行操作。这绝对比为每个字符调用索引器要快,并且可能比使用枚举器遍历所有字符要快。另外,我发现它更干净,尤其是在它用作参数的情况下:

DoSomethingWithCharArray(s.ToCharArray());

对比

int i = 0;
char[] arr = new char[s.Length];
foreach (char c in s)
{
    arr[i] = c;
    i++;
}

DoSomethingWithCharArray(arr);

或者

char[] arr = new char[s.Length];
for (int i = 0; i < s.Length; i++)
{
    arr[i] = s[i];
}

DoSeomthingWithCharArray(arr);
于 2013-01-18T21:13:07.003 回答
3

不同之处在于您不必要地创建了一个字符数组。使用 s[2]。

于 2013-01-18T21:12:28.640 回答
0

如果您只是阅读字符,则差异只是内存占用稍大。但是,如果您还想更改某些字符并保留原始字符串,那么使用ToCharArray非常有用。

于 2013-01-18T21:16:17.417 回答