问题标签 [collectionbase]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
reflection - 通过反射(或 Microsoft.Cci)确定 CollectionBase 的类型
问题:
是否有一种静态方法可以CollectionBase
使用 Reflection 或 Microsoft.Cci 可靠地确定派生自 的类型所包含的类型?
背景:
我正在开发一个代码生成器,它可以复制类型、制作这些类型的自定义版本以及在它们之间进行转换器。它通过 Microsoft.Cci 遍历源程序集中的类型。它使用文本模板打印出源代码。它进行了大量的转换和自定义,并丢弃了我不关心的代码。
在我生成的代码中,我打算替换以前使用过List<T>
的任何地方 a CollectionBase
、IEnumerable<T>
或。T[]
我想使用List<T>
是因为我很确定我可以在不做额外工作的情况下对其进行序列化,这对我的应用程序很重要。 T
在任何情况下都是具体的。我试图不复制CollectionBase
类,因为我必须复制自定义实现,并且我想避免在我的代码生成器中这样做。
我唯一遇到问题的部分是确定T
何时List<T>
更换 custom CollectionBase
。
到目前为止我所做的:
我简要查看了 MSDN 文档和示例,他们提到在派生类型上CollectionBase
创建自定义方法。Add
我不认为这是以任何方式强制执行的,所以我不确定我是否可以依赖它。实现者可以将其命名为其他名称,或者更糟的是,拥有一个支持多种类型的集合,并将Object
其作为它们唯一的共同祖先。
我考虑过的替代方案:
也许默认序列化有一些我可以利用的技巧。是否有CollectionBase
集合的默认序列化,或者您通常必须自己实现它?如果您必须自己做,是否有一些可靠的元数据我可以查看以确定类型?如果它支持默认序列化,它是否依赖于集合中项目的运行时类型?
我可以在我的代码生成器中创建一个已知CollectionBase
类型的映射,映射到它们对应T
的 for List<T>
。如果CollectionBase
我遇到的给定类型不在列表中,则抛出异常。如果没有可靠的替代方案,这可能就是我会选择的。
c# - CollectionBase 类是否仍受支持?
我想创建一个继承自 的类CollectionBase
,但它似乎不支持 LINQ 扩展!
它仍然支持吗?还是有替代解决方案?
c# - 如何判断某人何时从 CollectionBase 读取项目
我不确定这是否可以使用 CollectionBase 类。我想知道何时有人访问 CollectionBase 类中的项目。
最终目标是创建一个“VirtualMode”(类似于 DataGridView 控件),允许我在用户获取数据之前检查和验证数据。
所以会发生什么,他们可以创建一个包含 20 个对象的集合,在内部我们修改 IList 以包含 20 个空对象,然后当他们尝试读取一个项目时,如果它为空,我们转到外部数据源并读取它在那个时候。然后我们用读取的类替换现有的空对象,下次他们尝试访问它时,他们会得到缓存的版本。
打出来之后。我想知道 OnValidate 是否是这样做的正确位置。
任何帮助将不胜感激。
特雷弗·沃森
c# - 通用集合 - CollectionBase、IBindingList 和项目更改/编辑上的触发事件
我已经使用 IBindingList 实现了一个 GenericCollection,它工作得很好,并在添加或删除项目时触发事件。当项目按预期更改/编辑时,它不会触发事件。是否有一种简单的方法来实现逻辑来捕获更改或编辑,而不必在使用此集合的每个类中实现 INotifyPropertyChanged?
我可能正在寻找不可能的东西,但我基本上是在寻找模仿 DataTable 的功能,而不必在 INotifyPropertyChanged 中为使用该集合的每个类编写代码,并且我想让我的网格接收编辑/更改。
谢谢,
标记
c# - 集合基类中的 IList 列表?
问题是关于实现奇怪属性的集合基类:
1) 集合基类中的 Ilist List 是什么?...
2)它甚至没有初始化......那么它怎么能被访问......
3) 什么时候使用这个列表?
c# - 如何使用泛型集合实现自定义类型安全集合?
我使用了从类派生的强类型集合,CollectionBase
现在我想将其更改为从类型安全的泛型集合继承。有些建议继承自List<T>
,有些建议使用Collection<T>
。我想做的是:
1)我有一个自定义类,我正在创建一个仅包含该自定义类实例的集合。
2) 我有一些我希望自定义集合类具有的属性和方法。例如,它应该有一个Id
属性,或者它应该有一个IsBlahBlah()
方法。
我应该如何处理这个?当我从CollectionBase
类派生时,我使用该InnerList
属性来访问元素。如果我选择使用,我应该使用该Items
物业Collection<T>
吗?
正在做类似的事情:
正确的方式?它会在不干扰 中的方法的情况下开箱即用地正常工作Collection<T>
吗?
额外问题:当我在 Google 上搜索“强类型集合”时,它总是显示包含CollectionBase
该类的结果。强类型集合和类型安全集合有什么区别?
c# - 绑定到从 CollectionBase 派生的类的属性
我正在尝试将一些控件绑定到一个对象——这通常是一个非常简单的过程。不幸的是,如果我绑定到的对象继承自 CollectionBase,绑定到该类字段会导致错误:
无法绑定到 DataSource 上的属性或列 Caption。参数名称:dataMember
删除 collectionbase 继承使这个问题消失,但我需要这个对象是一个集合。似乎 CollectionBase 导致更高级别的属性变得“不可绑定”。是否有一些我可以覆盖的属性来解决这个问题?还有其他想法吗?
我在网上找到了这个例子,很容易总结了这个问题。不幸的是,我还没有在我看到这个例子的所有地方找到答案。
代码:
c# - CollectionBase 没有 IList 实现?
谁能向我解释为什么在抽象CollectionBase
类(System.Collections
其中派生自IList
)中没有IList
实现成员?我认为这是强制性的。
c# - 将 Collection 类分配给列表框的项目
我相信应该有更简单的方法来做到这一点。我有一个基于 Collection 的类,该类是另一个类的集合。目前,每当我的班级中有新项目时,我都会将该项目分配给列表框。我似乎无法找到将集合类中的所有值分配给列表框集合的方法,因为它是一个集合。有任何想法吗?谢谢
好的,到目前为止我所做的是我在集合中使用的 Class 中有一个 tostring 覆盖。这就是我希望列表框显示的内容。
这是我希望列表框中的每个项目显示的内容。
是我的集合类,包含另一个类的集合,Tansaction。目前,我使用 lstTransactions.Items.Add()、.Remove、.RemovAt 等将项目添加到列表框中,并使用 .Add()、.Remove 等将项目添加到 Collection Class、Transactions。但我试图减少对外部控件的依赖,并且只在几行代码中使用它们。我试图使用类似的东西:
但这似乎不起作用。主要是因为我无法弄清楚 DataSource 采用了什么属性。
我也试过:
但它告诉我项目是只读的。
c# - 创建没有默认方法的自定义列表
我正在创建一个从 CollectionBase 派生的列表,以便我可以使用自己的方法。这是在 dll 项目中制作的。我只是想知道是否可以从 CollectionBase 中隐藏默认方法,以便在使用此列表时只显示我的方法。