Как получить доступ к объекту внутри делегата - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть делегат функции, возвращающий объект.
Я храню этот объект в списке.
Я хочу перебрать этот список, чтобы получить значения в объекте, но в цикле 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)
    { }
}

1 Ответ

1 голос
/ 01 сентября 2011

Вы не сохраняете объект в списке, вы сохраняете метод для вызова (запуска) в списке.

Один из вариантов - вызвать ваш метод, чтобы получить результат.

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

В качестве альтернативы вы можете сделать свой список списком объектов и вызвать метод в вашем методе Register (и сохранить результат в своем списке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...