字符串.长度vs . string.ToCharArray().Length
本文关键字:Length ToCharArray string 长度 vs 字符串 | 更新日期: 2023-09-27 18:05:24
我正在清理一些重复执行myString.ToCharArray().Length
的旧代码;而不是myString.Length
。
在我重构ToCharArray()
之前,是否存在这样做会导致不同行为的情况?
没有区别:看看reflector的方法代码:它将根据字符串的长度分配char[]。
两者肯定会返回相同的长度,表示字符数(char
s)。字符串(或数组)的每个索引都有一个字符,然后,以下内容可能值得一提:
Length属性返回数组中Char对象的个数实例,而不是Unicode字符的数量。原因是aUnicode字符可以由多个Char表示。使用stringinfo类来处理每个Unicode
由此你也可以推断出ToCharArray
,假设它是"一个Unicode字符数组,其元素是此实例的单个字符",它们的行为相同。
我不确定NullReferenceException
上的not是关于什么的,因为两者都容易受到影响。
导致不同的行为?
嗯,正如其他人所说,在这两种方式下,结果将是char
的数量,所以,答案肯定是NO!
但是我想在这个答案中添加一些不同的东西。
当我反编译String.ToCharArray()
方法时,它看起来像:
public unsafe char[] ToCharArray()
{
int length = this.Length;
char[] chArray = new char[length];
if (length > 0)
{
fixed (char* smem = &this.m_firstChar)
fixed (char* dmem = chArray)
string.wstrcpyPtrAligned(dmem, smem, length);
}
return chArray;
}
ToCharArray
使用unsafe
代码操作指针,以及基类库中的私有wstrcpyPtrAligned
方法。它通常比在托管代码中做同样的事情要快,因为托管代码必须检查数组的边界。
,
它对字符串进行完整的传递,所以如果你不需要,手动填充字符数组可能会更快。
由于ToCharArray()
方法返回一个char数组,您可以就地修改它。这有时可以提高代码的性能。
我不认为它会在任何情况下产生不同的结果!
,但如果我使用它的重载方法,即ToCharArray(int startIndex, int length)
显然长度属性的值会随着长度的变化而变化
我也不能覆盖这个ToCharArray()
方法在我的自定义类像ToString()
方法。因此,如果您只想计算长度,那么使用myString.Length
比使用myString.ToCharArray().Length
更有意义。