由于.NET不使用C样式null
来结束字符串,如何保留分配的字符串,但是使用不安全的代码来改变它的长度?
据我所知,.NET为每个字符串使用一个20字节的标头,大概这是存储字符串长度的地方,无论如何直接修改这个长度?因此,.NET会将字符串保留在内存中,但是当我调用.Length
时,它将返回我想要的.Length
。
如果这是可能的话,听到这个 的所有可能的副作用会很有趣
更新
我正在尝试不使用反射来完成此任务。
答案 0 :(得分:4)
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
字段。