问题标签 [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.

0 投票
1 回答
195 浏览

reflection - 通过反射(或 Microsoft.Cci)确定 CollectionBase 的类型

问题
是否有一种静态方法可以CollectionBase使用 Reflection 或 Microsoft.Cci 可靠地确定派生自 的类型所包含的类型?

背景
我正在开发一个代码生成器,它可以复制类型、制作这些类型的自定义版本以及在它们之间进行转换器。它通过 Microsoft.Cci 遍历源程序集中的类型。它使用文本模板打印出源代码。它进行了大量的转换和自定义,并丢弃了我不关心的代码。

在我生成的代码中,我打算替换以前使用过List<T>的任何地方 a CollectionBaseIEnumerable<T>或。T[]我想使用List<T>是因为我很确定我可以在不做额外工作的情况下对其进行序列化,这对我的应用程序很重要。 T在任何情况下都是具体的。我试图不复制CollectionBase类,因为我必须复制自定义实现,并且我想避免在我的代码生成器中这样做。

我唯一遇到问题的部分是确定T何时List<T>更换 custom CollectionBase

到目前为止我所做的
我简要查看了 MSDN 文档和示例,他们提到在派生类型上CollectionBase创建自定义方法。Add我不认为这是以任何方式强制执行的,所以我不确定我是否可以依赖它。实现者可以将其命名为其他名称,或者更糟的是,拥有一个支持多种类型的集合,并将Object其作为它们唯一的共同祖先。

我考虑过的替代方案
也许默认序列化有一些我可以利用的技巧。是否有CollectionBase集合的默认序列化,或者您通常必须自己实现它?如果您必须自己做,是否有一些可靠的元数据我可以查看以确定类型?如果它支持默认序列化,它是否依赖于集合中项目的运行时类型?

我可以在我的代码生成器中创建一个已知CollectionBase类型的映射,映射到它们对应T的 for List<T>。如果CollectionBase我遇到的给定类型不在列表中,则抛出异常。如果没有可靠的替代方案,这可能就是我会选择的。

0 投票
2 回答
7399 浏览

c# - CollectionBase 类是否仍受支持?

我想创建一个继承自 的类CollectionBase,但它似乎不支持 LINQ 扩展!

它仍然支持吗?还是有替代解决方案?

0 投票
2 回答
107 浏览

c# - 如何判断某人何时从 CollectionBase 读取项目

我不确定这是否可以使用 CollectionBase 类。我想知道何时有人访问 CollectionBase 类中的项目。

最终目标是创建一个“VirtualMode”(类似于 DataGridView 控件),允许我在用户获取数据之前检查和验证数据。

所以会发生什么,他们可以创建一个包含 20 个对象的集合,在内部我们修改 IList 以包含 20 个空对象,然后当他们尝试读取一个项目时,如果它为空,我们转到外部数据源并读取它在那个时候。然后我们用读取的类替换现有的空对象,下次他们尝试访问它时,他们会得到缓存的版本。

打出来之后。我想知道 OnValidate 是否是这样做的正确位置。

任何帮助将不胜感激。

特雷弗·沃森

0 投票
2 回答
639 浏览

c# - 通用集合 - CollectionBase、IBindingList 和项目更改/编辑上的触发事件

我已经使用 IBindingList 实现了一个 GenericCollection,它工作得很好,并在添加或删除项目时触发事件。当项目按预期更改/编辑时,它不会触发事件。是否有一种简单的方法来实现逻辑来捕获更改或编辑,而不必在使用此集合的每个类中实现 INotifyPropertyChanged?

我可能正在寻找不可能的东西,但我基本上是在寻找模仿 DataTable 的功能,而不必在 INotifyPropertyChanged 中为使用该集合的每个类编写代码,并且我想让我的网格接收编辑/更改。

谢谢,

标记

0 投票
3 回答
1020 浏览

c# - 集合基类中的 IList 列表?

问题是关于实现奇怪属性的集合基类:

1) 集合基类中的 Ilist List 是什么?...

2)它甚至没有初始化......那么它怎么能被访问......

3) 什么时候使用这个列表?

0 投票
1 回答
524 浏览

c# - 如何使用泛型集合实现自定义类型安全集合?

我使用了从类派生的强类型集合,CollectionBase现在我想将其更改为从类型安全的泛型集合继承。有些建议继承自List<T>,有些建议使用Collection<T>。我想做的是:

1)我有一个自定义类,我正在创建一个仅包含该自定义类实例的集合。

2) 我有一些我希望自定义集合类具有的属性和方法。例如,它应该有一个Id属性,或者它应该有一个IsBlahBlah()方法。

我应该如何处理这个?当我从CollectionBase类派生时,我使用该InnerList属性来访问元素。如果我选择使用,我应该使用该Items物业Collection<T>吗?

正在做类似的事情:

正确的方式?它会在不干扰 中的方法的情况下开箱即用地正常工作Collection<T>吗?

额外问题:当我在 Google 上搜索“强类型集合”时,它总是显示包含CollectionBase该类的结果。强类型集合和类型安全集合有什么区别?

0 投票
1 回答
598 浏览

c# - 绑定到从 CollectionBase 派生的类的属性

我正在尝试将一些控件绑定到一个对象——这通常是一个非常简单的过程。不幸的是,如果我绑定到的对象继承自 CollectionBase,绑定到该类字段会导致错误:

无法绑定到 DataSource 上的属性或列 Caption。参数名称:dataMember

删除 collectionbase 继承使这个问题消失,但我需要这个对象是一个集合。似乎 CollectionBase 导致更高级别的属性变得“不可绑定”。是否有一些我可以覆盖的属性来解决这个问题?还有其他想法吗?

我在网上找到了这个例子,很容易总结了这个问题。不幸的是,我还没有在我看到这个例子的所有地方找到答案。

代码:

0 投票
1 回答
610 浏览

c# - CollectionBase 没有 IList 实现?

谁能向我解释为什么在抽象CollectionBase类(System.Collections其中派生自IList)中没有IList实现成员?我认为这是强制性的。

System.Collection.CollectionBase

0 投票
1 回答
2969 浏览

c# - 将 Collection 类分配给列表框的项目

我相信应该有更简单的方法来做到这一点。我有一个基于 Collection 的类,该类是另一个类的集合。目前,每当我的班级中有新项目时,我都会将该项目分配给列表框。我似乎无法找到将集合类中的所有值分配给列表框集合的方法,因为它是一个集合。有任何想法吗?谢谢

好的,到目前为止我所做的是我在集合中使用的 Class 中有一个 tostring 覆盖。这就是我希望列表框显示的内容。

这是我希望列表框中的每个项目显示的内容。

是我的集合类,包含另一个类的集合,Tansaction。目前,我使用 lstTransactions.Items.Add()、.Remove、.RemovAt 等将项目添加到列表框中,并使用 .Add()、.Remove 等将项目添加到 Collection Class、Transactions。但我试图减少对外部控件的依赖,并且只在几行代码中使用它们。我试图使用类似的东西:

但这似乎不起作用。主要是因为我无法弄清楚 DataSource 采用了什么属性。

我也试过:

但它告诉我项目是只读的。

0 投票
2 回答
45 浏览

c# - 创建没有默认方法的自定义列表

我正在创建一个从 CollectionBase 派生的列表,以便我可以使用自己的方法。这是在 dll 项目中制作的。我只是想知道是否可以从 CollectionBase 中隐藏默认方法,以便在使用此列表时只显示我的方法。