在C#(.NET)即时变量中是string.Length吗?

时间:2009-04-04 20:54:18

标签: c# .net string

我想知道C#中的string.Length是否是即时变量。通过即时变量我的意思是,当我创建字符串时:

string A = "";

A = "Som Boh";

现在计算长度吗?

OR

只有在我尝试获得A.Length之后才计算出来吗?

4 个答案:

答案 0 :(得分:16)

首先,请注意.NET中的字符串与存储在非托管语言中的字符串(例如C ++)非常不同......在CLR中,字符串的长度(以字符为单位,以字节为单位)实际上存储在内存中这样CLR知道包含字符串的内存块(字符数组)有多大。这是在创建字符串时完成的,并且在System.String类型不可变的情况下不会更改。

在C ++中,这是相当不同的,因为通过读取直到第一个空字符来发现字符串的长度。由于内存使用在CLR中的工作方式,您基本上可以认为获取字符串的Length属性就像检索int变量一样。如果你正在考虑的话,这里的性能成本绝对是最小的。

如果您想了解更多有关.NET中的字符串的信息,请尝试使用Jon Skeet's article主题 - 它似乎包含您可能想知道的有关.NET中字符串的所有详细信息。

答案 1 :(得分:10)

不计算字符串的长度,在构造时已知。由于String是不可变的,因此以后不需要计算它。

.NET字符串存储为包含字符数的字段和相应的一系列unicode字符。

答案 2 :(得分:3)

.NET字符串以预先计算的长度存储并存储在内部结构的开头,因此.Length属性只是获取该值,使其成为O(1)函数。

答案 3 :(得分:1)

它看起来像是string的属性,可能在构造函数中设置。由于它不是一个函数,我怀疑它是在你调用时计算的。他们只是获取Length属性的值。