由于 .NET 不使用 C 风格的 null
来结束字符串,我如何才能保留分配的字符串但使用不安全代码更改它的长度?
据我了解,.NET 为每个字符串使用 20 字节的 header ,大概这是存储字符串长度的地方,是否可以直接修改此长度?所以 .NET 会将字符串保存在内存中,但当我调用 .Length
时,它会返回我想要的 .Length
。
如果这是可能的,那么听到它所有疯狂的可能副作用也会很有趣
更新
我尝试在不使用反射的情况下完成此操作。
最佳答案
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';
}
}
关于c# - 更改字符串对象长度(通过突变!)的不安全代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176585/