gpt4 book ai didi

.net - 用字符串初始化的StringBuilder是否包含(仅)该字符串足够的空间?

转载 作者:行者123 更新时间:2023-12-04 02:28:13 27 4
gpt4 key购买 nike

我想知道这段代码...

StringBuilder sb = new StringBuilder("Please read the following messages.");

...使用与传递给构造函数的字符串完全一样大的缓冲区初始化 sb。一方面,这似乎是最合乎逻辑的事情。另一方面,似乎 StringBuilder类无法达到其最常见用途之一的目的,即提供可变性以使重复追加更为有效。 (如果我的问题的答案是"is",那么对 Append的首次调用将要求 sb自行调整大小。)

再说一次,我想人们可以将其视为类似于 List<T>的构造函数,该构造函数将 IEnumerable<T>作为参数。也许在这种情况下的假设是您不打算增加很多东西,而是要操纵已经存在的东西。

我对此所做的唯一真正的研究是检查 MSDN documentation on StringBuilder,它没有提供答案(它说构造函数“使用指定的字符串”初始化实例,但未指明如何使用字符串)。

编辑:所以它是“特定于实现的” ...对其他人来说似乎并不奇怪吗?我的意思是, StringBuilder类的目的是为在 string上执行大量操作提供一种替代方法,并在此过程中创建大量不可变的 string实例。因此,这是为了 效率。我觉得应该指定此构造函数的行为,以便开发人员可以在不考虑平台的情况下做出明智的决定。

我的意思是,它是由Microsoft以某种方式实现的。他们可以很容易地将其放在文档中(迫使其他实现也照做)。只是个人困惑的来源...

最佳答案

这是您无需担心的实现细节。但是,使用.NET reflector,并查看构造函数(其他构造函数调用)的(string,int32,int32,int32)重载,我们可以看到它选择的容量是16的倍数(在所请求的容量的下一个最大)尺寸)

编辑

实际上,它是16 x 2 ^ n,“n”的值被选为下一个最大大小

关于.net - 用字符串初始化的StringBuilder是否包含(仅)该字符串足够的空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266335/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com