String[0] vs ToCharArray then Char[0]

本文关键字:Char then vs String ToCharArray | 更新日期: 2023-09-27 17:54:49

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

string s = "cats";

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

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

String[0] vs ToCharArray then Char[0]

  • 如果你需要一个字符在特定的索引,使用"cats"[2]
  • 如果你需要整个字符串作为字符数组,使用"cats".ToCharArray()

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

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

如果你只需要一个字符,使用s[2]方法,因为ToCharArray()方法是浪费的。如果您需要字符串中的所有字符作为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);

区别在于您创建了一个不必要的字符数组。使用[2]。

如果您只是读取字符,区别只是稍微大一点的内存占用。但是,如果您还想更改一些字符并保留原始字符串,那么使用ToCharArray是非常有用的。