Utworzyłem klasę debugowania narzędzi w grze C#, nad którą pracuję, aby móc monitorować i oglądać wartości właściwości. Idzie tak:Ulepsz kod monitorowania właściwości?
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);
}
}
Teraz w celu monitorowania właściwość, że mój grze FPS, muszę zrobić
Monitor.Watch(new Property(Game, "FPS"));
nie Czy istnieje jakiś sposób, aby uczynić to prostsze w użyciu? Idealnie chciałabym móc zrobić
Monitor.Watch(Game.FPS);
Ale ponieważ nie możemy store pointers to value types w C#, nie wiem w jaki sposób to zrobić. Może przy użyciu zamknięć i wyrażeń lambada? Zasugerowałem to wcześniej, ale nie jestem pewien, jak to zrobić. Jakieś inne sposoby na poprawę tego?
Dzięki