首页 / 知识
关于c#:以只读方式返回集合
2023-04-14 21:58:00

Return collection as read-only我在多线程环境中有一个对象,该对象维护着信息的集合,例如:
我目前用
如果基础数据存储为列表,则可以使用List(T).AsReadOnly方法。 我对您接受的答案投了赞成票,并同意它-但是我可以给您一些考虑的方法吗? 不要直接返回集合。创建一个准确命名的业务逻辑类,以反映集合的目的。 这样做的主要优点在于您无法向集合中添加代码,因此只要您在对象模型中具有本机"集合",您就始终在整个项目中散布非OO支持代码来访问它。 例如,如果您的托收是发票,则您的代码中可能有3或4个地方可以遍历未付款的发票。您可以使用getUnpaidInvoices方法。但是,当您开始考虑诸如" payUnpaidInvoices(payer,account);"之类的方法时,真正的力量就会发挥作用。 当您传递集合而不是编写对象模型时,您将永远不会经历整个重构类。 另请注意,这会使您的问题特别好。如果您不希望人们更改收藏夹,则您的容器不需要包含任何变种器。如果以后再决定仅在一种情况下实际上必须进行修改,则可以创建一种安全的机制来进行修改。 当您传递本机集合时,如何解决该问题? 而且,本机集合无法使用额外的数据进行增强。下次您发现将(Collection,Extra)传递给多个方法时,您会认识到这一点。它表示"额外"属于包含您的集合的对象。 如果您的唯一目的是使调用代码不会出错,并且在仅应读取其内容时修改集合,则只需返回不支持Add,Remove等的接口即可。为什么不返回< x0>?调用代码将不得不进行强制转换,而在不知道所访问属性的内部的情况下,他们不太可能这样做。 但是,如果您的目的是阻止调用代码观察其他线程的更新,则您必须退回到已经提到的解决方案,根据您的需要执行深层或浅层副本。 我认为您在这里混淆了概念。
绝对没有线程安全保证。
您的实现取决于您的需求: 您要使用yield关键字。您遍历IEnumerable列表,并使用yeild返回结果。这样,消费者就可以在不修改集合的情况下使用。 它看起来像这样:
应该注意的是,aku的答案只会保护列表为只读。列表中的元素仍然非常可写。我不知道是否有任何方法可以在将非原子元素放入只读列表之前对其进行克隆而无需对其进行克隆。 您可以使用集合的副本。
这样一来,是否更新就无关紧要。 |
最新内容
相关内容
linux多线程下载命令?
linux多线程下载命令?,软件,工具,平台,中心,系统,代理,网络,网站,手机,官方网站,从linux服务器中下载或上传文件wget是linux下一个从网络上自linux常用的维护命令?
linux常用的维护命令?,系统,网络,管理,工作,标准,工具,地址,数据,命令,信息,linux运维必须知道的几个常用命令1、bash常用任务管理命令 &,Ctrl-linux查看多线程命令?
linux查看多线程命令?,系统,第一,线程,地址,数据,进程,命令,名称,软件,情况,如何查看linux服务器的cpu数量,内核数,和cpu线程数如何查看linuxlinux维护网络命令?
linux维护网络命令?,网络,地址,系统,工具,信息,服务,电脑,初级,设备,命令,linux查找网络配置命令是什么?1、首先在电脑上打开Linux系统,然后进linux下载命令多线程?
linux下载命令多线程?,系统,单位,概念,数据,线程,进程,产品,地址,代码,状态,谁有linux下多线程库的源码啊,要确实可用的,确实可以免费下载的,linux多线程跑命令?
linux多线程跑命令?,系统,代码,单位,地址,工具,入口,信息,管理,位置,服务,Linux多线程之同步互斥锁和读写锁:提供对临界资源的保护,当多线程试图python创建一个集合?
python创建一个集合?,异常,代码,括号,元素,函数,方法,两个,整数,操作,字符串,在Python中,集合是一种无序且不重复的数据类型,可以用于存储一组元让Python代码更易维护的工具
让Python代码更易维护的工具,代码,工具,标准,项目,质量,地方,更正,一致,变动,软件,检查你的代码的质量,通过这些外部库使其更易维护。可读性很Python3多线程爬虫讲解
Python3多线程爬虫讲解,代码,分时,系统,网络,状态,培训,做多,时间,线程,爬虫,多线程概述多线程使得程序内部可以分出多个线程来做多件事情,充什么是Python的多进程和多线程?
什么是Python的多进程和多线程?,代码,工作,线程,进程,培训,技术,系统,数据,通讯,任务,学Python的朋友听说过进程和线程吗?其实,不仅是Python,学Python的多线程
Python的多线程,数据,线程,状态,地址,时间,队列,标准,情况,概念,暂停,多线程类似于同时执行多个不同程序,多线程运行有如下优点:使用线程可以把Python 多线程与速度
Python 多线程与速度,代码,数据,项目,设计,有限,服务,生产,工作,受益,有望,问题:Python的总体性能较慢,有限的线程与孱弱的多处理能力成为其未