Tôi đã tạo một lớp gỡ lỗi tiện ích trong trò chơi C# mà tôi đang làm việc để có thể theo dõi và xem các giá trị của thuộc tính. Đi như thế này:Cải thiện mã theo dõi tài sản?
public static class Monitor
{
private static List<object> monitoredObjects;
public static void Initialize()
{
monitoredObjects = new List<object>();
}
public static void Watch(object o)
{
monitoredObjects.Add(o);
}
public static void Unwatch(object o)
{
monitoredObjects.Remove(o);
}
public static void Draw(RenderWindow app)
{
//Not actual code, I actually draw this in game
foreach (object o in monitoredObjects)
Console.WriteLine(o.ToString());
}
}
public class Property
{
private object obj;
private PropertyInfo propertyInfo;
public override string ToString()
{
return propertyInfo.Name + ": " + propertyInfo.GetValue(obj, null).ToString();
}
public Property(object o, string property)
{
obj = o;
propertyInfo = o.GetType().GetProperty(property);
}
}
Bây giờ để theo dõi tài sản, nói trò chơi của tôi FPS, tôi phải làm gì
Monitor.Watch(new Property(Game, "FPS"));
Sẽ không có một cách nào đó làm cho điều này đơn giản để sử dụng không? Lý tưởng nhất tôi muốn có thể làm
Monitor.Watch(Game.FPS);
Nhưng vì chúng tôi không thể store pointers to value types trong C#, tôi không biết làm cách nào để thực hiện việc này. Có thể sử dụng bao đóng và biểu thức lambada? Tôi đã đề xuất điều này sớm hơn nhưng tôi không chắc chắn làm thế nào để làm điều đó. Bất kỳ cách nào khác để cải thiện điều này?
Cảm ơn