给定一个带有对象的集合 - 我需要一种方法来确定这个对象是否也是其他集合的成员。
I.E在某种伪代码中
object o;
Collection<object> col1;
col1.Add(o);
Collection<object> col2;
col2.Add(o);
MagicWords.GetTheReferingCollectionsTo(o);
GetTheReferingCollectionsTo应该返回col1和col2。
有人知道如何在C#
中完成某些工作答案 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的引用