假设我想获取字符串中的第三个字母。
string s = "cats";
正如我在网上看到的大多数示例一样,使用 s[2] 获取值有什么区别:
char[] c = s.ToCharArray();
char x = c[2];
"cats"[2]"cats".ToCharArray()该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);
不同之处在于您不必要地创建了一个字符数组。使用 s[2]。
如果您只是阅读字符,则差异只是内存占用稍大。但是,如果您还想更改某些字符并保留原始字符串,那么使用ToCharArray非常有用。