如何在C#中查找对象的引用

时间:2010-01-14 12:56:25

标签: c# .net

给定一个带有对象的集合 - 我需要一种方法来确定这个对象是否也是其他集合的成员。

I.E在某种伪代码中

object o;

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

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

MagicWords.GetTheReferingCollectionsTo(o);

GetTheReferingCollectionsTo应该返回col1和col2。

有人知道如何在C#

中完成某些工作

3 个答案:

答案 0 :(得分:3)

AFAIK除非使用跟踪引用实现您自己的集合,否则您无法以编程方式执行此操作。

答案 1 :(得分:1)

如果您认为您的应用需要,那么就该看一下设计是否合理。它可能

我确信您可以通过巧妙地使用多个Dictionary<TKey,TValue>'集合'来实现您的目标,并通过调用字典对象上的ContainsKey()来检查对象的键值。

答案 2 :(得分: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;
      }}

输出:3个集合中有2个包含对3的引用