小编Ale*_*der的帖子

C#通过Span/Memory和MemoryMarshal修改interned字符串

我开始深入研究新的 C#/.net 核心功能(称为 Span 和 Memory),到目前为止它们看起来非常好。然而,当我遇到MemoryMarshal.AsMemory方法时,我发现了以下有趣的用例:

const string source1 = "immutable string";
const string source2 = "immutable string";

var memory = MemoryMarshal.AsMemory(source1.AsMemory());

ref char first = ref memory.Span[0];
first = 'X';

Console.WriteLine(source1);
Console.WriteLine(source2);
Run Code Online (Sandbox Code Playgroud)

两种情况下的输出都是Xmmutable string(在 Windows 10 x64、.net471 和 .netcore2.1 上测试)。据我所知,任何被保留的字符串现在都可以在一处进行修改,然后对该字符串的所有引用都将使用更新后的值。

有什么办法可以防止这种行为吗?是否可以“取消”字符串?

.net c# .net-core

6
推荐指数
1
解决办法
1401
查看次数

标签 统计

.net ×1

.net-core ×1

c# ×1