String.Length如何在.NET中工作?

时间:2013-11-20 12:16:13

标签: c# .net

我想知道String.Length如何计算字符数。
如果可能的话,一个简单的算法就可以很好地解释它。

4 个答案:

答案 0 :(得分:12)

没有。字符数存储为字段(m_stringLength,如果重要的话); .Length只返回此值。在.NET中,字符串通常不是nul-terminated或类似的。更有趣的问题是“存储字符串数据的位置” - 这很复杂; string类型是通常规则的例外,对象本身具有可变大小;字符数据直接位于string对象内(string类型不具有指向字符数据的指针或引用; 字符数据,加上一个长度字段)。

答案 1 :(得分:1)

在二进制系统中实现字符串有两种常用方法:

  1. 用一个数字表示前面的长度(这就是.NET的作用方式。)
  2. 使用特殊字符终止字符串。这是'C'样式字符串。
  3. 对于第一种方法,您可以将数字从内存中取出并返回。第二种方法需要计数,直到遇到特殊字符(NULL)。

答案 2 :(得分:1)

SystemString.Length不计算字符数,它存储长度。

存储字符串有两种常用方法 - 字符+长度,字符+终结符。在.NET中使用第一种方法;在其他语言中,例如C,使用第二种方法。

答案 3 :(得分:0)

在.NET内部字符串存储为NULL终止字符数组,其中包含额外的元数据,如长度以及字符串是否包含任何特殊字符。因为字符串是不可变的,所以从操作创建的新字符串(例如:连接)具有更新的长度。

http://csharpindepth.com/Articles/General/Strings.aspx

这是一个基本的字符串长度函数,如果你有一个空终止的字符数组,并且你想找到它的长度。

编辑澄清一下,字符数组CAN包含null或\ 0字符,但是当您将该数组表示为空终止字符串时,该字符串将以它到达的第一个空值结束。另一点是.NET中的字符是UTF-16,但是“通常”在引用空终止字符串时,您将处理ASCII(每个字符1个8位字节),对于下面的示例,我将使用byte []数组代替char []数组来澄清那个。

long length = 0;
foreach(var ch in byteArray) {
    if(ch == 0) break;
    length++;
}