String [0] vs ToCharArray然后Char [0]

时间:2013-01-18 21:08:56

标签: c# .net char

说我想要在字符串中输入第三个字母。

string s = "cats";

使用s [2]获取值之间的区别是什么, 正如我在网上看到的大多数例子:

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

4 个答案:

答案 0 :(得分:8)

  • 如果您需要特定索引处的字符,请使用"cats"[2]
  • 如果您需要将整个字符串作为char数组,请使用"cats".ToCharArray()

答案 1 :(得分:4)

s[2]方法只是查找该位置的字符并将其返回。

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

如果您只需要一个字符,请使用s[2]方法,因为ToCharArray()方法很浪费。如果您需要字符串中的所有字符为char[],则ToCharArray()方法更清晰,可能更快(我没有进行任何基准测试,所以不要保留我到那。)

修改

MS.NET和Mono的string.ToCharArray()实现都使用不安全的代码来固定内部char和重复char[]并对指针进行操作。这肯定比为每个字符调用索引器更快,并且可能比使用枚举器迭代所有字符更快。另外我发现它更清洁,特别是在它用作参数的情况下:

DoSomethingWithCharArray(s.ToCharArray());

VS

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);

答案 2 :(得分:3)

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

答案 3 :(得分:0)

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