假设我想获取字符串中的第三个字母。
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
非常有用。