不安全的代码来改变String对象的长度(通过变异!)?

由于.NET不使用C样式的null来结束字符串,我如何保留分配的字符串,但是使用不安全的代码来改变它的长度?

据我所知,.NET为每个字符串使用一个20字节的标头,大概这是存储字符串长度的地方,无论如何直接修改这个长度? 因此,.NET会将字符串保留在内存中,但是当我调用.Length它将返回我想要的.Length

如果这是可能的话,那么听到这种疯狂可能的副作用也会很有趣

UPDATE

我正在努力完成这个而不使用reflection。

来自Strords UNDOCUMENTED

 public static unsafe void SetLength(string s, int length) { fixed(char *p = s) { int *pi = (int *)p; if (length<0 || length > pi[-2]) throw( new ArgumentOutOfRangeException("length") ); pi[-1] = length; p[length] = '\0'; } } 

您可以使用Reflection来设置m_StringLength字段。