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

时间:2011-11-18 01:07:32

标签: c# .net string unsafe

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

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

如果这是可能的话,听到这个 的所有可能的副作用会很有趣

更新

我正在尝试不使用反射来完成此任务。

2 个答案:

答案 0 :(得分:4)

来自Strings 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';
    }
}

答案 1 :(得分:0)

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