Files
XCharts/Runtime/Utilities/ReflectionUtil.cs

48 lines
1.5 KiB
C#
Raw Normal View History

2021-11-23 13:20:07 +08:00
using System;
using System.Reflection;
namespace XCharts
{
public static class ReflectionUtil
{
public static void InvokeListClear(object obj, FieldInfo field)
{
var list = field.GetValue(obj);
var method = list.GetType().GetMethod("Clear");
method.Invoke(list, new object[] { });
}
2021-12-28 08:18:24 +08:00
public static int InvokeListCount(object obj, FieldInfo field)
{
var list = field.GetValue(obj);
return (int)list.GetType().GetProperty("Count").GetValue(list);
}
2021-11-23 13:20:07 +08:00
public static void InvokeListAdd(object obj, FieldInfo field, object item)
{
var list = field.GetValue(obj);
var method = list.GetType().GetMethod("Add");
method.Invoke(list, new object[] { item });
}
2021-12-28 08:18:24 +08:00
public static T InvokeListGet<T>(object obj, FieldInfo field, int i)
{
var list = field.GetValue(obj);
var item = list.GetType().GetProperty("Item").GetValue(list, new object[] { i });
return (T)item;
}
2021-11-23 13:20:07 +08:00
public static void InvokeListAddTo<T>(object obj, FieldInfo field, Action<T> callback)
{
var list = field.GetValue(obj);
var listType = list.GetType();
var count = Convert.ToInt32(listType.GetProperty("Count").GetValue(list));
for (int i = 0; i < count; i++)
{
var item = listType.GetProperty("Item").GetValue(list, new object[] { i });
callback((T)item);
}
}
}
}