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

2023-12-29

通常将内部数据结构作为属性公开给您的业务类。但是,当我们必须公开类似数组的结构(如 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());
    }
}

而不是返回一个Clone,您可以返回只读版本rules using rules.AsReadOnly().

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

请注意IList.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用属性公开类似数组的数据结构 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • 如何在 Blackberry Cascades 中显示具有特定号码的电话板

    我正在使用带有 C QT 和 QML 的 Blackberry Cascades 10 Beta 3 SDK 以及 Blackberry 10 Dev Alpha Simulator 和 QNX Momentics IDE 并且我正在尝试实
  • 如何使用 Mongodb C# 驱动程序连接多个集合

    我需要将 3 个集合与多个集合合并在一起 lookup我在 C 驱动程序中尝试过 它允许我 lookup用户采集但无法执行秒 lookup用于设置集合 有人可以帮忙吗 db Transactions aggregate lookup fro
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • HttpWebRequest 在第二次调用时超时

    为什么以下代码在第二次 及后续 运行时超时 代码挂在 using Stream objStream request GetResponse GetResponseStream 然后引发 WebException 表示请求已超时 我已经尝试过
  • 如何从main方法调用业务对象类?

    我已将代码分为业务对象 访问层 如下所示 void Main Business object public class ExpenseBO public void MakeExpense ExpensePayload payload var
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 云代码函数运行两次

    我写了一个运行良好的云函数 有时 同一用户会多次执行此函数 我确保客户端 Android 应用程序只请求一个请求 经过一些调试后 我注意到如果连接不良就会出现此问题 我可能是正确的 也可能不正确 如何克服这样的问题 正如评论中所述 我也不相
  • 如何使用 php 在数据库中插入和检索图像

    我正在尝试上传会员个人资料的图像并使用 php 将其存储在数据库中 然后检索它 但它对我不起作用 这就是我尝试插入图像的方法
  • 通过删除 numpy 数组来释放内存

    我编写了一个带有 GUI 的疲劳分析程序 该程序获取有限元模型每个元素的单位载荷的应变信息 使用 np genfromtxt loadcasefilename txt 读取载荷工况 然后进行一些疲劳分析并将每个元素的结果保存在另一个数组中
  • 多个 CSS @media 条件似乎不起作用

    我正在尝试修改 CSS 中的几个类以适应不同的屏幕分辨率 我的目标是 默认应用的 CSS 宽度为 1200 嵌入在 CSS 中的媒体查询 用于 601 到 601 之间的分辨率 1199 px 这不起作用 嵌入在 CSS 中的媒体查询 分辨
  • django 的递归查询集

    我有这个模型引用自身以允许构建一棵树 class PartCategory models Model parent models ForeignKey PartCategory on delete models DO NOTHING nul
  • 如何合并同一列中的单元格,应用行跨度?

    在我的报告的 jrxml 设计中 我的详细信息部分有一列为特定组打印相同的内容 例如 如果我有一个国家列美国 下一列包含其州 每个条目都会重复 美国国家 地区 所以我需要合并具有美国价值的国家 地区单元格 我需要合并列中具有相同值的所有单元
  • 为什么使用 from __future__ import print_function 会破坏 Python2 风格的打印? [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我是Python编程新手 我试图用分隔符和结尾打印出来 但它仍然给我一个语法错误 我正在使用Python 2 7 这是我的代码 f
  • 使用按键绑定进行 JLabel 移动

    我在 swing 中制作了一个简短的脚本 人们不断告诉我 我需要使用按键绑定来让 Jlabel 移动 但我不知道该怎么做 任何人都知道如何以不使用按键侦听器的方式实现按键绑定 或者如果我添加按钮 这将是一个问题 import java aw
  • 网格调用时出错

    在尝试使用生成任何图时ggplot2 给出以下错误 Error in grid Call C textBounds as graphicsAnnot x label x x x y X11 font adobe helvetica s s
  • Flask - 将对象直接存储在会话中[重复]

    这个问题在这里已经有答案了 我想知道是否可以直接在 Flask 会话中存储对象 而不需要重写序列化器 为了使其正常工作 我需要在班级中实现任何功能吗 示例代码如下 这就是我想要的样子 然而 当你尝试执行它时 它会抛出一个错误TypeErro
  • Xen、QEMU 和 KVM 之间有什么区别?

    我知道Xen使用QEMU 而KVM是QEMU的一个分支 那么 KVM 包括 Xen 添加到 QEMU 中吗 是什么名字 Thanks QEMU 是一个功能强大的模拟器 这意味着它可以模拟多种处理器类型 Xen 使用 QEMUHVM http
  • Rails:application_helper.rb 中定义的方法无法被categories_controller.rb 识别

    更多新手问题 据我了解 如果我在应用程序帮助程序中定义一个方法 则整个应用程序代码都可以使用该方法 在我的应用程序助手中 我有 def primary user is admin if current user user login rol
  • 片段替换后,使用 RxJava2 + RxBinding 的 RecyclerView 项目单击不起作用

    我在 Fragment 中有一个 RecyclerView 项目点击是使用 RxJava2 处理的 如中所述这个答案 https stackoverflow com a 39962415 2341815 它在非片段中运行良好 private
  • 生成 3 到 6 之间的随机 int 值

    Microsoft SQL Server 是否可以生成从 Min 到 Max 的随机 int 值 3 9 示例 15 99 等 我知道 我可以从0到Max生成 但是如何增加Min边框呢 该查询生成从 1 到 6 的随机值 需要将其从 3 更
  • 如何对带有连接的 SQL 查询结果应用分页?

    我有一个连接 3 个表的 SQL 查询 其中一个只是连接另外两个表的多对多 我使用 Spring JDBC ResultSetExtractor 将 ResultSet 转换为我的对象 大致如下所示 class Customer priva
  • 如何附加到字符串中的所有网址?

    我应该如何附加到即将作为电子邮件发送的 html 字符串中所有 url 的末尾 我想像这样添加谷歌分析活动跟踪 utm source email utm medium email utm campaign product notify 99
  • elasticsearch中的源过滤、存储字段和文档值之间有什么区别?

    我已经阅读了文档源过滤 https www elastic co guide en elasticsearch reference 6 4 search request source filtering html 存储字段 https ww
  • 多维数组快速排序

    我需要根据第一个子数组中的值尽快对多维数组进行排序 该行被应用了数百万次 以下是我原来的路线 以及我改进其性能的尝试 但没有成功 据我所知 我的numpy方法仅对第一个子数组进行正确排序 而不对其余子数组进行正确排序 我做错了什么以及如何提
  • 在 params 中传递函数时,在导航状态中发现不可序列化的值

    我有两个屏幕 Screen A import React useState from react import Text View Button from react native const ViewA navigation gt con
  • 使用属性公开类似数组的数据结构

    通常将内部数据结构作为属性公开给您的业务类 但是 当我们必须公开类似数组的结构 如 List 规则 时 我们可能会遇到错误使用的问题 如选项 1 中所示 建议将此类数据结构的克隆公开为属性 以便内部结构不会受到干扰 有没有人对此有一个很好的