2011-09-01 6 views
-1

개체를 반환하는 함수 대리자가 있습니다.
개체를 목록에 저장하려고합니다.
나는 개체의 값을 얻기 위해 그 목록을 반복하기를 원하지만 루프에 내가 그렇게 할 수 없습니다입니다 :대리자 내에서 개체에 액세스하는 방법

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(); 
    } 
} 

은 또한 당신은 당신의 목록 개체의 목록 확인 및 등록 방법에 메소드를 호출 (그리고 목록에 결과를 저장) 할 수있다.

관련 문제