c# - 使用属性公开类似数组的数据结构

标签 c# data-structures properties

通常会将内部数据结构作为属性公开给您的业务类。但是当我们必须公开类似数组的结构(如 List 规则)时,我们可能会遇到错误使用的问题(如选项 1)。

建议将此类数据结构的克隆公开为属性,这样内部结构就不会受到干扰。

有没有人对此有完善的解决方案?

public class Rule 
{
}

public class RulesManager 
{
    List<Rule> rules = new List<Rule>();

    public List<Rule> Rules
    {
        get { return rules; }
        set { rules = value; }
    }

    public void Add(Rule r)
    {
        rules.Add(r);
        // Do something else after add;
    }

    public void Delete(Rule r) 
    {
        rules.Remove(r);
        // Do something else after delete;
    }
}
public class CallingCode 
{
    public static void Main() 
    {
        RulesManager r = new RulesManager();
        // Option 1            
        r.Rules.Add(new Rule());
        // Option 2 
        r.Add(new Rule());
    }
}

最佳答案

您可以使用 rules.AsReadOnly() 返回 rules 的只读版本,而不是返回 Clone

public IList<Rule> Rules
{
  get { return rules.AsReadOnly(); }
// set { rules = value; -- should not be allowed to set if read only!
}

注意 IList

关于c# - 使用属性公开类似数组的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641923/

相关文章:

c# - C# 中的随机数猜谜游戏出现问题

C# 控制平衡括号递归

适用于将字符串与正则表达式模式匹配的数据库或结构

c++ - 家谱的数据结构

c# - 输入字符串的格式不正确。处理异常

c# - 数组属性初始化

Jquery 如何从具有堆叠值选项(例如字体系列)的 css 属性中获取特定的 css 值

javascript - 如何在asp.net和vb.net中单击删除按钮后向后重定向两步

c# - 如何将dataGridView的前3列readOnly设置为true

java - 什么数据结构适合事件和监听器的顺序事件分发系统?