改变字符串对象长度(通过突变!)的不安全代码

本文关键字:突变 代码 不安全 对象 字符串 改变 | 更新日期: 2023-09-27 18:15:15

作为。net不使用C风格的null s结束字符串,我怎么能保持分配的字符串,但通过使用不安全的代码改变它的长度?

正如我所理解的。net使用每个字符串的20字节头,大概这是存储字符串长度的地方,是否有直接修改这个长度?所以。net将把字符串保存在内存中,但是当我调用.Length时,它会返回我想要的.Length

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

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

改变字符串对象长度(通过突变!)的不安全代码

From Strings document

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字段