小编sch*_*ter的帖子

C# IReadOnlyList<t> 保护立即被向下破坏,或者我错过了什么?

鉴于以下情况:如果 IReadOnly(T) 是从现有的 MutableEquivalent(T) 构想出来的,那么简单地转换为可变版本就允许完全访问,并且对其他人可能依赖的对象进行更改,这真的是这样吗?静态元素/数量?下面的输出显示了我的“THIRD INJECTION”字符串,尽管迭代了只读集合。难道只是出于礼貌和自我控制而禁止向下转换只读集合吗?您是否应该看到提供的接口,并承受其限制,强制转换不变,仅由于类型?感谢您对该界面和其他类似界面真正承诺/保证的任何澄清。

编辑-这不是 IReadOnlyCollection<T>与 List.AsReadOnly() 的重复,因为我在问题中没有提到 List.AsReadOnly() ,也没有提到 IReadOnlyCollection 。这些是由响应者介绍的。这是一个关于 IReadOnly 接口后面的底层可变列表暴露的问题。一些评论中有一些重叠,但有一个问题,例如“IReadOnly 实际上对其底层可变列表(T)做了什么?” 重复了我的问题的精神。不是“这两个有关只读的实体之间有什么区别?”,因为我只提到了一个。

static class Program
{

    public static void Main()
    {
        List<string> hack = (List<string>) READONLY;
        hack.Add("THIRD INJECTION");

        foreach (var s in READONLY)
        {
            Console.WriteLine(s);
        }
    }

    public static readonly IReadOnlyList<string> READONLY = new List<string>{"@0", "@1"};

}
Run Code Online (Sandbox Code Playgroud)

c# collections readonly readonly-collection c#-4.0

3
推荐指数
1
解决办法
1897
查看次数

标签 统计

c# ×1

c#-4.0 ×1

collections ×1

readonly ×1

readonly-collection ×1