我从列表中有一个元素,如何从元素访问此列表计数,如下所示:
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);
}
答案 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.
干杯