首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C#对象初始值设定项和集合

C#对象初始值设定项和集合
EN

Stack Overflow用户
提问于 2010-07-25 23:11:46
回答 3查看 293关注 0票数 2

我正在尝试设置一个类,以便可以使用对象初始化器对其进行初始化,但它包含一些集合。理想情况下,我希望客户端代码能够:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyClass myObj = new MyClass
{
  Name = "Name",
  Contents = new[]
  {
    "Item1",
    "Item2"
  }
}

但是,其中Contents需要是一个BindingList<string>。底层字段存储了对该列表的只读引用,我希望setter在设置内容时先执行Clear,然后再执行AddRange

我不能将Contents属性设置为IEnumerable<string>,因为客户机代码不能看到Add方法,至少在不强制转换它的情况下是看不到的。我不能使它成为BindingList<string>,因为如果我设置它,我需要构造一个新的绑定列表来传递给它。这可能是可能的,但我不希望仅仅为了将其传递给属性设置器而构造新的BindingList<string>的效率低下。

理想的做法是让getter返回一个BindingList<string>,而setter接受IEnumerable<string>,但是C#不允许属性上的getter/setter有不同的类型。

哦,而且在BindingList<string>IEnumerable<string>之间进行隐式强制转换是一个禁忌,所以我也不能这样做(http://blogs.msdn.com/b/peterhal/archive/2005/06/20/430929.aspx)。

有什么办法可以解决这个问题吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-25 23:28:32

C#初始值设定项语法将自动对属性的集合对象调用Add方法。当然,这不会预先调用Reset(),但是对象在这一点上仍然是空的,所以这并不重要。

替换列表必须使用属性集语法吗?让setter替换集合的内容而不实际更改集合对象标识是非常出乎意料的,并且可能会导致错误。

票数 2
EN

Stack Overflow用户

发布于 2010-07-25 23:20:21

创建从BindingList<string>派生的自定义集合类,并从类型string[]添加隐式强制转换

票数 1
EN

Stack Overflow用户

发布于 2010-07-25 23:54:55

我建议您封装BindingList。在这种情况下,回到老式的创建对象的方式,这样就不会创建不必要的耦合。比起语言约定,更喜欢好的OO。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3331404

复制
相关文章
C# 程序在 Docker 中响应 Unix 信号
在 Docker Entry Script 详解中介绍了如何在 shell 脚本中响应 Unix 信号量来实现 Docker 应用优雅的关闭退出, 本文介绍 C# 程序如何在 Docker 中响应 Unix 信号实现优雅的关闭退出。
beginor
2020/08/10
1.6K0
使用Clang编译C程序在安卓设备中执行
在android-ndk-r19c目录下toolchains文件夹中的llvm文件夹即为clang编译工具包
乱码三千
2021/08/24
3.1K0
在eclipse中和命令行中执行接收args[]参数
首先是在cmd命令行中,比如test.java文件,javac test.java编译,
砖业洋__
2023/05/06
5450
在eclipse中和命令行中执行接收args[]参数
Qt编译错误:底层由于接收到操作系统的信号而停止indows
在Qt,写代码时,遇到内存泄漏,崩溃的问题。当时定位了很久,因为是偶尔出现,不稳定。后来发现了一些规律。需要规避,也没有想明白为什么为出现这个问题。
何其不顾四月天
2023/03/10
7970
CompletableFuture在超时后,能够停止执行吗?
因此,CompletableFuture的异步任务如果超时异常try掉了,是不会停止执行的
阿超
2022/11/22
2.8K0
CompletableFuture在超时后,能够停止执行吗?
python程序执行时间_用于在Python中查找程序执行时间的程序
The execution time of a program is defined as the time spent by the system to execute the task. As we all know any program takes some execution time but we don't know how much. So, don't worry, in this tutorial we will learn it by using the datetime module and also we will see the execution time for finding the factorial of a large number. A large number will be provided by the user and we have to calculate the factorial of a number, also we have to find the execution time of the factorial program. Before going to write the Python program, we will try to understand the algorithm.
用户7886150
2021/01/28
2K0
IOS开发中滑动页面时NSTimer停止的问题
我们在做倒计时的时候,发现当你手指按着屏幕不放,拖动tableView滑动的时候,写在cell上得倒计时停止倒计时,松开继续倒计时。研究发现就是拖动tableView滑动时,NSTimer停止了。 这其实就是runloop的mode在做怪。 runloop可以理解为cocoa下的一种消息循环机制,用来处理各种消息事件,我们在开发 的时候并不需要手动去创建一个runloop,因为框架为我们创建了一个默认的runloop,通过[NSRunloop currentRunloop]我们可以得到一个当前线程下面对应
王大锤
2018/05/17
1.8K0
在idea中maven项目jdk编译version总是跳到1.5
bug描述 项目ide: idea 项目构建工具:maven bug现象:每次修改pom之后,idea自动扫描一遍,然后发现默认的compile级别跳到5.0. 每次手动去setting里修改compile很费事。 解决方案 猜测是maven中没有指定jdk,所以才会扫描为默认的jdk版本。 于是,添加maven-compile-plugin: <plugin> <artifactId>maven-compiler-plugin</artifac
Ryan-Miao
2018/03/13
1.2K0
信号与系统实验一 信号在MATLAB中的表示
 3.用下列函数各画一图,参数自定。 sinc,rectpuls,square,tripuls,sawtooth
timerring
2022/07/20
1.3K0
信号与系统实验一 信号在MATLAB中的表示
Python 在信号处理中的优势
本篇是对Pylab的小试牛刀,也是对许多其他主题的过渡——包括《编码速度估计的长时间等待的后果》。
用户3412318
2019/01/02
2.8K0
.c中变量必须定义在执行语句前面
int main() { int a =1;     a = 2;     int b = 3;
saintyyu
2021/11/22
1.9K0
.c中变量必须定义在执行语句前面
传感器信号接收模块
还是很开心的一天,调试了好久的程序终于顺利运行,也算是从手机app软件的使用者向开发者迈出了那么一小步~;一直以来,想要构件一个小的生态:技术能够带来利润,利润又能够反哺技术,进而实现可持续发展;近来以智能传感作为一个切入点,对链条上涉及的各个环节进行学习、归纳和总结,希望能够实现技术相对闭环;
联远智维
2022/01/20
3940
传感器信号接收模块
蓝牙信号接收模块—虚拟示波器
很是开心的一天,沉下心来,和同学一起编写调试了蓝牙信号接收模块—虚拟示波器,实现了数据接收、保存以及可视化等功能,具体如下所示;在这个过程中,结实了优秀的小伙伴,号称获得过物联网比赛一等奖(湖北赛区),另外远程与同学合作默契,项目推进快速高效,回顾这两周的时光,第一感觉是感谢~最后,香港大学田师兄对蓝牙数据接收模块进行了测试,后期将依据反馈问题进行优化更改~
联远智维
2022/01/20
9710
蓝牙信号接收模块—虚拟示波器
在 Docker 容器中捕获信号
我们可能都使用过 docker stop 命令来停止正在运行的容器,有时可能会使用 docker kill 命令强行关闭容器或者把某个信号传递给容器中的进程。这些操作的本质都是通过从主机向容器发送信号实现主机与容器中程序的交互。比如我们可以向容器中的应用发送一个重新加载信号,容器中的应用程序在接到信号后执行相应的处理程序完成重新加载配置文件的任务。本文将介绍在 docker 容器中捕获信号的基本知识。
星哥玩云
2022/07/19
2.7K0
在 Docker 容器中捕获信号
在FPGA中,同步信号、异步信号和亚稳态的理解
叁芯智能科技-郝旭帅团队打造“FPGA 设计与研发”学习系列, 可以让设计者从“小白”到“入门”再到“精通”。本系列从基础的数字电路为起点,避免学习者“腾空造楼”;中间讲解各类基础外设驱动,保证设计能力逐步加深;后期讲解 FPGA 设计理论和复杂外设、协议驱动实现,确保与现实企业研发对接。
FPGA技术江湖
2020/12/30
9290
WordPress 搜索结果中只有1个文章时自动跳到该文章方法
WordPress 搜索结果中只有1个文章时自动跳到该文章的方法。当访问者通过WordPress自带的搜索查找文章时,如果返回的结果只有一篇文章,可以直接跳转到这篇文章,从而提高用户体验。
主机教程网2bcd.com
2022/10/26
2700
页面切换时为什么会自动跳到recyclerView的位置?
页面切换时RecyclerView获得了焦点,RecyclerView的 focusableOnTouchMode属性默认是true,所以页面切换时RecyclerView自动获得焦点就滚动到头部。抢焦点的问题。
yechaoa
2022/06/10
6140
trap - 在脚本中处理信号
  比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序。如果要在Ctrl+C不退出程序,那么就得使用trap命令来指定一下SIGINT的处理方式了。
yaohong
2019/09/11
1.6K0
windows moblie 5.0在托管程序中实现短信接收和拦截
该文介绍了如何在Windows Mobile 5.0下使用.NET Compact Framework实现短信的接收和拦截,包括安装Windows Mobile 5.0 Pocket PC SDK、开发工具Visual Studio 2005、安装实例程序以及编写代码实现拦截短信功能。
Jianbo
2018/01/02
1.7K0
SORT命令在Redis中的实现以及多个选项时的执行顺序
SORT命令在Redis中实现了对存储在列表、集合、有序集合数据类型的元素进行排序的功能。
一凡sir
2023/10/05
6130
SORT命令在Redis中的实现以及多个选项时的执行顺序

相似问题

程序接收信号sigtstp停止(用户)

21

使用c中的信号并从程序中的特定点恢复

20

C程序在分配变量时停止执行。

22

接收信号时停止gdb同时循环

20

在QML中接收C++信号

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文