如果与 F# 类似物进行比较,为什么 C# 字符串的标题为 "Immutable"?

Why does C# string have a title "Immutable" if to compare it with F# analogue?

我读过那些较早的主题:

但是,我无法理解immutable这个词的含义,如果将其与F#模拟进行比较:

open System
let data = "London"
data <- "123"
Console.WriteLine data

由于下一个原因,这个无法编译:

error FS0027: This value is not mutable. Consider using the mutable keyword, e.g. 'let mutable data = expression'.

所以...如果将 F# 的行为与 C# 的行为进行比较,似乎 F# 具有不可变性的真正含义或者我不理解该术语的真正含义...

让我们看看 C# 变体:

class Program
{
    static void Main()
    {
        var a = "London";
        a = "123";
        System.Console.WriteLine(a);
    }
}

输出将是:123

我们从下一篇文章中获取信息:Why are the strings immutable in .NET?

老实说,如果看这张图片并将其与 F# 变体进行比较,我看不出它的不变性......而且,据我所知,SO 上有 100 多人(问题发表在这个问题的顶部)不会错,并为这种含义给出错误的名称。

请告诉我为什么 C# 字符串名为 immutable,如果我可以更改它的值?而如果拿它和F#的sample对比的话,单义的结果是不一样的。

您混淆了 F# 中变量的不可变性和 C# 中对象的不可变性。

在 C# 中,您可以更改表示变量指向的字符串的对象。但是您无法更改该对象的任何内容,因此该对象是不可变的。

在 F# 中,您无法更改变量的值,因此变量也是不可变的。