C# 如何访问委托中的对象

C# 如何访问委托中的对象,c#,delegates,C#,Delegates,我有一个函数委托返回一个对象。 我正在列表中存储该对象。 我想遍历该列表以获取对象中的值,但在for循环中,我无法这样做: public static class Tracking { public delegate TrackingObject GetTrackObject (); public static List<GetTrackObject> TrackedLists = new List<GetTrackObject>(); publ

我有一个函数委托返回一个对象。
我正在列表中存储该对象。
我想遍历该列表以获取对象中的值,但在for循环中,我无法这样做:

public static class Tracking
{
    public delegate TrackingObject GetTrackObject ();
    public static List<GetTrackObject> TrackedLists = new List<GetTrackObject>();

    public static void Register (GetTrackObject trackobject)
    {
        TrackedLists.Add(trackobject);
    }
}

public class TrackingObject
{
    object collection;
    Type T;
    Type K;
    Type V;

    public TrackingObject (object o, Type t, Type k, Type v)
    {
        collection = o;
        T = t;
        K = k;
        V = v;
    }
}

class TrackList<T> : List<T>
{
    public string Name = null;
    public int ItemCount;
    public int AvgSize;
    public int Size;

    public TrackList (string name, byte avgsize)
    {
        this.Name = name;
        this.AvgSize = avgsize;
        this.ItemCount = this.Count;
        this.Size = this.Count * this.AvgSize;

        Tracking.Register(this.GetTrackObject);
    }

    public TrackingObject GetTrackObject ()
    {
        TrackingObject TO = new TrackingObject(this, typeof(T), null, null);
        return TO;
    }
}

public static void Main ()
{
    foreach (Tracking.GetTrackObject method in Tracking.TrackedLists)
    { }
}
公共静态类跟踪
{
公共委托跟踪对象GetTrackObject();
public static List TrackedLists=new List();
公共静态无效寄存器(GetTrackObject-trackobject)
{
TrackedLists.Add(trackobject);
}
}
公共类跟踪对象
{
对象收集;
T型;
K型;
V型;
公共跟踪对象(对象o、类型t、类型k、类型v)
{
收集=o;
T=T;
K=K;
V=V;
}
}
类跟踪列表:列表
{
公共字符串名称=null;
公共整数项目计数;
公共int AvgSize;
公共整数大小;
公共轨迹列表(字符串名称,字节avgsize)
{
this.Name=Name;
this.AvgSize=AvgSize;
this.ItemCount=this.Count;
this.Size=this.Count*this.AvgSize;
Tracking.Register(this.GetTrackObject);
}
公共跟踪对象GetTrackObject()
{
TrackingObject TO=新的TrackingObject(this,typeof(T),null,null);
返回;
}
}
公共静态void Main()
{
foreach(Tracking.trackedlist中的Tracking.GetTrackObject方法)
{ }
}

您不是在列表中存储对象,而是在列表中存储要调用(运行)的方法

一个选项是调用您的方法以获得结果

public static void Main ()
{
    foreach (Tracking.GetTrackObject method in Tracking.TrackedLists)
    {
        object trackedObject = method();
    }
}


或者,您可以将列表设置为对象列表,并在Register方法中调用该方法(并将结果存储在列表中)。

我不理解这个问题。你的错误是什么?失败的是什么?我必须同意@David Heffernan的观点,这个代码看起来很笨拙。。。trackingobject委托背后的原因的公共字段让我感到困惑