列表上的只读违规 在C#? [重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

当它与List结合使用时,是否存在违反只读关键字的情况?

例如

class Program
{
    public List<string> InputList;
    public List<string> DefaultList;
    public readonly List<string> ReadOnlyList;

    public Program()
    {
        InputList = new List<string>() { "Initialized String" };
        DefaultList = InputList;
        ReadOnlyList = InputList;
    }

    static void Main(string[] args)
    {
        var p = new Program();
        p.SampleMethod();
        Console.ReadKey();
    }

    private void SampleMethod()
    {
        Console.WriteLine("inputList - " + InputList.LastOrDefault());
        Console.WriteLine("readOnlyList - " + ReadOnlyList.LastOrDefault());
        Console.WriteLine("defaultList - " + DefaultList.LastOrDefault());
        InputList.Add("Modified String");
        Console.WriteLine("inputList - " + InputList.LastOrDefault());
        Console.WriteLine("readOnlyList - " + ReadOnlyList.LastOrDefault());
        Console.WriteLine("defaultList - " + DefaultList.LastOrDefault());
    }
}

和打印的输出

inputList - Initialized String

readOnlyList - Initialized String

defaultList - Initialized String

inputList - Modified String

readOnlyList - Modified String

defaultList - Modified String

readonly的概念是,它的值只能在构造函数内部进行更改,如果它没有被初始化的话。在上面的例子中,当两个集合在运行时被更改时,ReadOnlyList和DefaultList之间的确切区别是什么。

通过将ReadOnlyList更改为IReadOnlyCollection,我发现没有区别。有人可以帮助我理解这个概念。

c# list readonly readonly-collection
1个回答
0
投票

根据documentation

在字段声明中,readonly表示对字段的赋值只能作为声明的一部分或在同一个类的构造函数中出现。

你正在这样做,在构造函数内部分配。

列表本身是readonly,而不是它的内容。

© www.soinside.com 2019 - 2024. All rights reserved.