C# 引用多个集合中的对象,并使每个集合中的顺序影响某些属性

C# 引用多个集合中的对象,并使每个集合中的顺序影响某些属性,c#,.net,vb.net,oop,C#,.net,Vb.net,Oop,这很难解释 我有一系列的盒子,每个盒子都有自己的内容。该框可以出现在多个书架上,如果内容发生了变化,我希望全局反映这些变化 因此,我有一个盒子的全球集合,并从中创建每个架子的盒子集合 我的问题是知道盒子在每个架子上的位置。让我们只关心X的位置 在一种情况下,我的箱子可以坐在架子的中间,它的X位置将是44厘米。 在另一种情况下,同一个框可能位于工具架的开头,其X位置为0 我需要以Shelf(id).Box(id).PosX的形式访问它 但这总是会给出一个答案,答案应该根据父书架的不同而变化 我知道

这很难解释

我有一系列的盒子,每个盒子都有自己的内容。该框可以出现在多个书架上,如果内容发生了变化,我希望全局反映这些变化

因此,我有一个盒子的全球集合,并从中创建每个架子的盒子集合

我的问题是知道盒子在每个架子上的位置。让我们只关心X的位置

在一种情况下,我的箱子可以坐在架子的中间,它的X位置将是44厘米。 在另一种情况下,同一个框可能位于工具架的开头,其X位置为0

我需要以Shelf(id).Box(id).PosX的形式访问它

但这总是会给出一个答案,答案应该根据父书架的不同而变化


我知道这个问题有很多答案,但我希望有人有一种比我一直计划的一些事情更优雅的方式。

盒子应该知道它在哪里吗?可能不会-你应该能够询问书架上的内容,这意味着询问书架上的盒子在哪里

myShelf.GetBoxPosition(boxId).PosX
因此,长方体没有任何位置信息,这是有意义的,因为它可以位于多个位置。书架知道里面的东西在哪里,可以回答你的问题


这里的假设是,框不会多次出现在同一个书架上,否则它将不得不返回框位置的集合,而不是单个框位置。

这是我考虑过的一种方法。另一个是长方体可以引用回它的父对象,以调用父对象中的方法来获取它自己的PosX。这两种方法都不理想,但这种方法可以让我保留我使用的许多其他对象(不能是多位置的)的整体编码结构。i、 e.myObj.PosX与每个对象一样,该框具有与“默认”工具架相关的本地位置信息(如果您愿意)。它的不同之处在于,它可以放在“虚拟”书架上,作为对同一数据的不同视图。另一件我考虑过但无法实现的事情是,因为我正在书架上构建一个框字典,我假设字典将保留我添加框的顺序,然后我可以根据宽度等计算PosX。但我无法找到通过索引(而不是键)获取字典项的方法。