2011-09-01 100 views
-1

我有一个函数委托返回一个对象。
我将这个对象存储在一个列表中。
我想通过该列表来获得对象的值进行迭代,但在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) 
    { } 
} 
+3

我不明白这个问题。你的错误是什么?什么是失败? –

+0

我必须同意@David Heffernan,这段代码看起来很尴尬......公众领域的背后的原因,跟踪对象委托只是困惑我 – edvaldig

回答

1

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

一个选项是调用你的方法来获得结果。

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

或者,也可以让你列表对象的列表,并调用你的注册方法,该方法(和结果存储在您的列表)。