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];
- 如果你需要一个字符在特定的索引,使用
"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
是非常有用的。