问题标签 [custom-collection]

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 投票
3 回答
14114 浏览

ios - 具有不同单元格大小的 UICollectionView

我的目标是创建一个UICollectionView如下所示的布局。

在不创建自定义的情况下这可能UICollectionViewLayout吗?

0 投票
1 回答
588 浏览

c# - 如何将 ObservableCollection 转换为包装器集合以跟踪更改?

我认为这是一个相当简单的问题,但我仍然无法找到更好的解决方案。所以在研究了这个问题之后,我想在这里问这个问题以获得专家意见。

基本上,我正在研究 WPF 应用程序,并且我已经定义了GenericObserableCollection<T>实现ObservableCollection<T>,并且大多数集合都实现了它,以便在整个项目中采用标准方法。

最初,一切都很好,但后来当实体框架出现时,我不得不彻底改变域设计,因为 EF 需要公开ICollection<T>映射。那时,我很困惑保持最小的变化并适应 EF,因为我是新手。

后来经过研究,我遇到了一些处理这种情况的好文章。

我在我的应用程序域中应用了相同的方法来创建ChildrenStorage作为ICollection<GenericRule>EF 的要求。

现在我正在寻找一种聪明而优雅的方法来保持我的两个集合,即在添加和/或删除项目时ChildrenStorage与集合同步。Children由于Childrencollection 将通过 UI 进行修改,因此我想跟踪对所做的任何更改Children并希望同步ChildrenStorage

0 投票
1 回答
1862 浏览

c# - 是否有 PropertyGrid 集合编辑器“添加”按钮事件或覆盖?

单击 Windows 窗体 PropertyGrid 集合编辑器“添加”按钮时是否触发了事件或函数?(见图)

我想添加一些自定义代码以在按下此按钮时运行。

我将自定义集合用于对象列表(CollectionBase)。按下“添加”按钮时会调用我的构造函数,但我在调用列表中看不到可以插入一些自定义代码的其他函数。

在此处输入图像描述

0 投票
1 回答
54 浏览

c# - c# XML反序列化

又拔了我的头发。我整天都在看这个,无法弄清楚它是否可能,或者我做错了什么。

我创建了一个自定义对象集合。

然后我有一个事情:

Fields 对象继承自 ObjectCollection:

最后我有一个包含大量属性的字段类:

这似乎可行的唯一方法是,如果我像这样创建我的字段类:

我讨厌。必须访问它,例如 Thing.Fields.Items.Add 而不是 Thing.Fields.Add。对我来说没有意义。

XML 是这样的:

当我尝试反序列化它时,我只得到一个默认字段,即它添加到 objectcollection 但只有一个项目,并且它显然未能将该字段反序列化为它基本上是空的。

我试图看看我是否能弄清楚哪些属性可能会有所帮助,但我不确定。我还研究了创建自定义反序列化,但这似乎有点矫枉过正。

谁能帮我指出正确的方向。我只想要一个整洁的解决方案 - 复杂性最少!!!就像我们一样:-)

在我跳下当地码头之前,任何帮助将不胜感激。

干杯,

斯图。

0 投票
2 回答
788 浏览

excel - x64 自定义类上的 For Each 枚举错误

几个月前我在 VBA 中发现了一个错误,但找不到合适的解决方法。这个错误真的很烦人,因为它限制了一个很好的语言功能。

使用自定义集合类时,希望有一个枚举器以便可以在For Each循环中使用该类是很常见的。这可以通过添加以下行来完成:

在函数/属性签名行之后立即通过:

  1. 导出类模块,在文本编辑器中编辑内容,然后重新导入
  2. 在函数签名上方使用Rubberduck注解'@Enumerator,然后进行同步

不幸的是,在 x64 上,使用上述特性会导致写入错误的内存,并在某些情况下导致应用程序崩溃(稍后讨论)。

重现错误

CustomCollection班级:

标准模块中的代码:

通过运行该Main方法,代码将停在Assert该方法的行上ShowBug,您可以在Locals窗口中看到,局部变量的值不知从何处发生了变化: 其中 ptr1 等于. 方法中使用的变量越多(包括可选参数),方法中的 ptrs 越多,写入的值(内存地址)就越多。
在此处输入图像描述
ObjPtr(c)NewEnumShowBug

不用说,删除方法中的本地ptr变量ShowBug肯定会导致应用程序崩溃。

逐行单步执行代码时,不会出现此错误!


更多关于这个错误

该错误与实际Collection存储在CustomCollection. 调用 NewEnum 函数后立即写入内存。因此,基本上执行以下任何操作都无济于事(经过测试):

  1. 添加Optional参数
  2. 从函数中删除所有代码(参见下面的代码)
  3. 声明为IUnknown而不是IEnumVariant
  4. 而不是Function声明为Property Get
  5. 在方法签名中使用类似Friendor的关键字Static
  6. 将 DISPID_NEWENUM 添加到 Get 的LetSet对应项,甚至隐藏前者(即,将 Let/Set 设为私有)。

让我们尝试上面提到的第 2 步。如果CustomCollection变成:

并且用于测试的代码更改为:

运行Main会产生相同的错误。

解决方法

我发现避免该错误的可靠方法:

  1. 调用一个方法(基本上是离开ShowBug方法)然后回来。这需要在For Each执行该行之前发生(之前意味着它可以在同一方法中的任何位置,不一定是之前的确切行):

    缺点:容易忘记

  2. 做一个Set声明。它可能在循环中使用的变体上(如果没有使用其他对象)。与上面的第 1 点一样,这需要在For Each执行该行之前发生:

    甚至通过使用Set c = c
    Or 将集合设置为自身,将c参数传递ByValShowBug方法(作为 Set,调用 IUnknown::AddRef)
    缺点:容易忘记

  3. 使用一个单独的EnumHelper类,它是唯一用于枚举的类:

    CustomCollection会成为:

    和调用代码:

    显然,保留的 DISPID 已从CustomCollection类中删除。

    优点:强制For Eachon.NewEnum函数而不是直接自定义集合。这避免了由错误引起的任何崩溃。

    缺点:总是需要额外的EnumHelper课程。很容易忘记在行中添加.NewEnumFor Each只会触发运行时错误)。

最后一种方法(3)之所以有效,是因为在c.NewEnum执行该ShowBug方法时退出,然后在调用类Property Get EnumVariant内部之前返回EnumHelper。基本上方法(1)是避免错误的方法。


这种行为的解释是什么?能否以更优雅的方式避免此错误?

编辑

通过CustomCollectionByVal 并不总是一种选择。考虑一个Class1

现在是一个调用例程:

显然,这个例子有点勉强,但是有一个包含“子”对象的自定义集合的“父”对象是很常见的,并且“父”可能想要执行一些涉及部分或全部“子”的操作。

在这种情况下,很容易忘记在行Set前执行语句或方法调用For Each

0 投票
1 回答
114 浏览

ios - 具有动态缩放单元格的 UICollectionView

我的目标是创建如下所示的布局:

布局

我知道如何创建这些自定义 UICollectionViewCells,但我在布局上遇到了麻烦。所有显示的单元格的宽度都不同,因此可以有,例如:第一行有四个,第二行有两个,最后一个在第三行。这只是一种可能的配置,根据标签的宽度,还有更多配置(包括图像上显示的配置)。

我正在以编程方式构建所有内容。我也觉得使用UICollectionView是最好的选择,但我愿意接受任何建议。

提前致谢!

我已经尝试过的:

0 投票
1 回答
219 浏览

python - Prometheus 计数器未在自定义收集器中产生

我正在写这个客户收集器,我想在其中添加一个计数器。

但是我在 yield 时遇到了错误