从元素如何访问List

时间:2014-03-05 16:30:07

标签: c# reflection ilist

我从列表中有一个元素,如何从元素访问此列表计数,如下所示:

    public void Setup()
    {
    var myList = new List<T>();
    myList.add(new T(1));
    myList.add(new T(2));
    myList.add(new T(3));
    myList.add(new T(4));


    var myElement = myList.Last();

    MyFunctionReflection(myElement);
    }



    public void MyFunctionReflection(T element)
    {
    var countElements = ????? //How determine elements in Ilist from element using reflection
   Console.Write("the list that owns the element, contains {0} elements.",countElements);
    }

3 个答案:

答案 0 :(得分:0)

出于所有实际目的,这是不可能的。

理论上,使用unsafe代码,可以遍历整个程序的内存空间,查找每个List对象,查看它是否包含对相关对象的引用,以及然后访问它的数量。虽然这在理论上可能是可行的,但对于几乎任何问题来说几乎肯定不是可接受的解决方案,并且尝试编码会非常困难/耗时。

答案 1 :(得分:0)

你不能。

您必须传入计数,或传入对列表的引用:

public void MyFunctionReflection(T element, int count) ...

public void MyFunctionReflection(T element, IList<T> list) ...

答案 2 :(得分:0)

元素与其所属的List之间没有直接链接。

你可以做的是,当你实例化你的元素时,将它传递给List并通过元素的属性使它可用。

你元素类:

public class Element
{
    public List<Element> ParentList;

    public Element(int value, List<Element> parent)
    {
        ...
        ParentList = parent;
    }
}

然后在你的主要代码中:

var myList = new List<T>();
myList.add(new T(1, myList));
myList.add(new T(2, myList));
myList.add(new T(3, myList));

然后:

var countElements = myElement.ParentList.Count; // ParentList is the reference to the List<T> that was passed to the constructor.

干杯