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委托背后的原因的公共字段让我感到困惑