gpt4 book ai didi

c# - 如何在使用 get 属性公开 List 的同时保护 List 的 Add 方法?

转载 作者:IT王子 更新时间:2023-10-29 04:52:49 26 4
gpt4 key购买 nike

我有一个名为 WhatClass 的类,其中包含 List 字段。我需要能够只读这个字段,所以我使用 get 属性将它暴露给其他对象。

public class WhatClass
{
List<SomeOtherClass> _SomeOtherClassItems;

public List<SomeOtherClass> SomeOtherClassItems { get { return _SomeOtherClassItems; } }
}

然而事实证明,任何对象都可以调用

WhatClass.SomeOtherClassItems.Add(item);

我怎样才能避免这种情况?

最佳答案

正如其他人所说,您正在寻找 .AsReadOnly()扩展方法。

但是,您应该存储对集合的引用,而不是在每次属性访问期间创建它:

private readonly List<SomeOtherClass> _items;

public WhatClass()
{
_items = new List<SomeOtherClass>();

this.Items = _items.AsReadOnly();
}

public ReadOnlyCollection<SomeOtherClass> Items { get; private set; }

这是为了确保x.Items == x.Items成立,否则这对于 API 消费者来说可能是非常意外的。

曝光ReadOnlyCollection<>向消费者传达您对只读集合的​​意图。更改为 _items会反射(reflect)在Items .

关于c# - 如何在使用 get 属性公开 List 的同时保护 List 的 Add 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3260665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com