我知道字符串具有可变长度,因此它们需要存储器中的可变空间.当我们在a中定义一个字符串项时struct,其struct大小的长度将是可变的.
较旧的语言通过使用固定长度的字符串来管理它.但是,没有办法在C#中定义固定长度的字符串,而C#管理structs中的普通字符串非常好.
当我们定义这样的structs数组或简单的字符串数组时,这变得更加奇怪.由于一个字符串长度的任何变化(减少/增加),所有正向structs必须被移位.
C#如何处理结构中的可变长度字符串?
jjl*_*lin 48
对字符串的引用(不是值类型)存储在结构中,因此结构大小永远不会更改.
Fir*_*oso 11
我的第一个问题是,你的要求是否需要一个固定长度的字符串?如果是这样,char []可能实际上是您打算使用的.
.NET框架不直接使用C样式字符串(char数组),而是通过不可变引用表示字符串.当附加或修改字符串时,实际上是在内存中创建一个新的字符串对象.这是平台的期望特征,但是需要考虑到期望神奇地调整字符串大小的特征可能导致一些不期望的副作用.
回到你的问题."C#如何管理结构中的字符串?"
从我看到的解释这个问题的两种方法之一:
1).如何创建包含字符串的结构,以及.NET Framework如何在此方案中管理字符串?
简短回答:请记住字符串是不可变类型.通常创建你的结构,并意识到结构只包含对字符串的引用,而不是结构的神奇调整大小段,扩展为包含易失性字符串.
2).如果.NET Framework是由结构体表示的值类型,.NET Framework如何调整其大小.
简短的回答,它没有.这不是.NET如何使用字符串,见上文.
+1到jjlin以获得对问题的简明而准确的答案,但更一般的答案可能有用:
任何引用类型的字段或变量声明表示引用的存储位置. 对于结构的字段也是如此.
(在结构中包含引用类型字段使该类型成为"托管类型",这在不安全的代码中很重要;您不能声明指向托管类型的指针.)