C#中List <t>上的只读冲突?

时间:2019-02-27 13:35:25

标签: c# list readonly readonly-collection

当与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的确切区别是什么。 / p>

通过将ReadOnlyList更改为IReadOnlyCollection也没有什么区别。有人可以帮助我理解这一概念。

1 个答案:

答案 0 :(得分:0)

按照documentation

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

您正在执行此操作,是在构造函数内部进行分配。

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