【问题标题】:Read-Only violation on List<T> in C#? [duplicate]C# 中 List<T> 的只读冲突? [复制]
【发布时间】:2019-07-21 05:59:47
【问题描述】:

read only 关键字与 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

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

我也发现将 ReadOnlyList 更改为 IReadOnlyCollection 并没有什么区别。有人可以帮我理解这个概念吗?

【问题讨论】:

  • 您误解了readonly 关键字的作用
  • readonly 适用于引用,而不是列表的内容。
  • “只读的概念是,它的值只能在构造函数内部更改”取决于“值”的含义。没错,您不能重新引用该变量。但是,您当然可以调用该实例上的任何成员,例如Add.

标签: c# list readonly readonly-collection


【解决方案1】:

根据documentation

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

你正在做这件事,在构造函数中赋值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-04-19
    相关资源
    最近更新 更多