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

标签 c# .net string unsafe

由于 .NET 不使用 C 风格的 null 来结束字符串,我如何才能保留分配的字符串但使用不安全代码更改它的长度?

据我了解,.NET 为每个字符串使用 20 字节的 header ,大概这是存储字符串长度的地方,是否可以直接修改此长度?所以 .NET 会将字符串保存在内存中,但当我调用 .Length 时,它会返回我想要的 .Length

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

更新

我尝试在不使用反射的情况下完成此操作。

最佳答案

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

关于c# - 更改字符串对象长度(通过突变!)的不安全代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8176585/

相关文章:

c# - 使用 .net 中用户错误报告的行号重新创建堆栈跟踪?

c# - Accpac API 文档

Java 字符串等于文字警告消息

php - PHP 中单引号和双引号字符串有什么区别?

c++ - 计算文件中的换行符

c# - Logger.LogDebug 与 Debug.WriteLine

c# - Cortana 与 Bot 框架集成

c# - Moq 设置 当模拟实现具有相同方法签名的多个接口(interface)的接口(interface)时出现 InvalidCastException

c# - 按日期排序 asp.net MVC 5

c# - 通过 PCL 创建 MVVM Light ViewModel?适用于 Xamarin.Forms 和 WPF