c# - CompilationRelaxations.NoStringInterning 实际上是如何工作的?

标签 c# string-interning

我在演示 NoStringInterning 时遇到问题

[assembly: System.Runtime.CompilerServices.CompilationRelaxations(System.Runtime.CompilerServices.CompilationRelaxations.NoStringInterning)]

    class Program
    {
        static void Main(string[] args)
        {
            String s1 = "Friday";
            String s2 = "Friday";
            String s3 = "Friday";
            String s4 = "Friday";
            String s5 = "Friday";
            String s6 = "Friday";
            String s7 = "Friday";
            String s8 = "Friday";
            String s9 = "Friday";
            // etc...
            Console.WriteLine(Object.ReferenceEquals(s1, s2));
            Console.WriteLine(Object.ReferenceEquals(s1, s3));
            Console.WriteLine(Object.ReferenceEquals(s1, s4));
            Console.WriteLine(Object.ReferenceEquals(s1, s5));
            Console.WriteLine(Object.ReferenceEquals(s1, s6));
            Console.WriteLine(Object.ReferenceEquals(s1, s7));
            Console.WriteLine(Object.ReferenceEquals(s1, s8));
            Console.WriteLine(Object.ReferenceEquals(s1, s9));
            // etc...

我已经尝试使用 .NET CLR 2、3、4.. 作为输出,我得到的只是一堆 True。我期待一堆 False!

最佳答案

documentation声明该属性:

Marks an assembly as not requiring string-literal interning.

换句话说,它不会阻止编译器进行字符串驻留,只是提供一个不需要它的提示。这方面的文档有点稀疏,但这似乎也是 this MSDN forum post 中的结论。 .

关于c# - CompilationRelaxations.NoStringInterning 实际上是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15601916/

相关文章:

C# 属性中的 TimeSpan

c# - 空 block 是否被优化掉了? C#

c# - 想要在 C# 中具有不同构建的不同图标

python - 什么决定了哪些字符串被驻留以及何时被驻留?

c# - 关于字符串实习和替代方案

string - cpython的字符串实习的规则是什么?

c# - 如何在gridview中将文本转换为货币?

c# - 带有返回 null 的简单注入(inject)器的 ASP.NET Core 2.1 服务定位器

java - 为什么这些字符串的 str == str.intern() 的结果不同?

java - Java的String#intern()方法是如何实现的?