Pregunta

Estoy escribiendo un sistema que requiere que busque los valores de las propiedades en un objeto, preferiblemente usando la reflexión. Este proyecto es para el Xbox360, que se ejecuta en el marco compacto y, por lo tanto, tiene un recolector de basura lento, ¡esto significa que es absolutamente vital que evite las asignaciones!

La única forma en que he encontrado hacer esto es:

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

No me gusta esto por 2 razones:

  • Casting es para alfareros, Genics es para programadores
  • Obviamente crea basura cada vez que tengo que obtener un valor primitivo y se encaja.

¿Existe algún método genérico para obtener el valor de una propiedad, que no encerrará primitivas?

Editar :: En respuesta a la respuesta de Jons, este código robado de su blog no causa asignaciones, problemas resueltos:

        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");
        }
¿Fue útil?

Solución

Una alternativa sería crear un delegado del método Getter usando Delegate.CreateDelegate - Sin embargo, no sé si eso es compatible con la versión de marco compacto utilizada por Xbox.

tengo un entrada en el blog en Delegate.CreateDelegate que puede encontrar útil, pero nuevamente, deberá ver cuánto es aplicable a Xbox.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top