2010-01-14 140 views
0

给定一个对象的集合 - 我需要一种方法来查明这个对象是否也是其他集合的成员。如何查找对C#中对象的引用

即在某种伪代码

object o; 

Collection<object> col1; 
col1.Add(o); 

Collection<object> col2; 
col2.Add(o); 

MagicWords.GetTheReferingCollectionsTo(o); 

凡GetTheReferingCollectionsTo应该返回col1和COL2。

不要任何人知道的方式来完成成才一样,在C#

+0

参考不,除非对象o具有作为属性添加到的集合的集合。什么导致你达到这个要求?对于你的问题,可能会有更好的模式,我经常发现,当某种方法看起来过于困难时。 – Lazarus 2010-01-14 13:02:46

+0

使用NHibernate并得到一个ObjectDeleteException - 出现时,简单地说,当我有两个或更多父母的子对象,我找不到另一个父对象。 – 2010-01-14 13:45:21

回答

3

AFAIK你不能这样做,除非编程与跟踪引用实现自己的收藏。

+0

我相信这是封装的原则。 – MunkiPhD 2010-01-14 13:03:17

1

如果您认为您的应用需要该应用,现在该查看设计是否正常。它可能是而不是

我敢肯定,你可以通过巧妙地使用几个Dictionary<TKey,TValue>“集合”来实现你想要的,并通过在字典对象上调用ContainsKey()来检查对象的关键值。

0

如果你知道,当你打电话给你的查询方法,你可以做类似这样的

class Program { 
     static void Main(string[] args) 
     { 
     List<int> ints = new List<int>(); 
     List<int> ints2 = new List<int>(); 
     List<int> ints3 = new List<int>(); 
     for (int i = 0; i < 5; ++i) ints.Add(i); 
     for (int j = 0; j < 5; ++j) ints2.Add(j); 
     for (int k = 0; k < 3; ++k) ints2.Add(k); 

      List<ICollection<int>> rets = GetRefs<int>(3, ints, ints2, ints3); 

      Console.WriteLine(string.Format("{0} out of {1} collections contain a reference to {2}", rets.Count, rets.Capacity, 3)); 

      Console.ReadKey(); 
     } 

     public static List<ICollection<T>> GetRefs<T>(T o, params ICollection<T>[] collections) 
     { 
     List<ICollection<T>> ret = new List<ICollection<T>>(collections.Length); 
     foreach (ICollection<T> obj in collections) 
     { 
      if (obj.Contains(o)) ret.Add(obj); 
     } 
     return ret; 
     }} 

输出的东西去搜一下藏品是:2开出3集包含到3

+0

这就是问题所在。我不知道要搜索哪些收藏集。 – 2010-01-14 14:53:24