Я пишу систему, которая требует от меня извлечения значений свойств объекта, предпочтительно с использованием отражения. Этот проект предназначен для xbox360, который работает на компактной платформе и, следовательно, имеет медленный сборщик мусора - это означает, что крайне важно, чтобы я избегал выделения!
Я нашел только один способ сделать это:
Foo Something; //an object I want to get data from
PropertyInfo p; //get this via reflection for the property I want
object value = p.GetGetmethod().Invoke(Something, null);
//Now I have to cast value into a type that it should be
Мне это не нравится по двум причинам:
- Кастинг для гончаров, дженерики для программистов
- Очевидно, он создает мусор каждый раз, когда мне нужно получить примитивное значение, и он упаковывается.
Существует ли какой-нибудь универсальный метод для получения значения из свойства, который не будет блокировать примитивы?
РЕДАКТИРОВАТЬ :: В ответ на ответ Джонса, этот код, украденный из его блога, не вызывает выделения ресурсов, проблема решена:
String methodName = "IndexOf";
Type[] argType = new Type[] { typeof(char) };
String testWord = "TheQuickBrownFoxJumpedOverTheLazyDog";
MethodInfo method = typeof(string).GetMethod(methodName, argType);
Func<char, int> converted = (Func<char, int>)Delegate.CreateDelegate
(typeof(Func<char, int>), testWord, method);
int count = GC.CollectionCount(0);
for (int i = 0; i < 10000000; i++)
{
int l = converted('l');
if (GC.CollectionCount(0) != count)
Console.WriteLine("Collect");
}