Question

Je suis en train d'écrire un système qui me demande d'aller chercher les valeurs des propriétés dans un objet, de préférence en utilisant la réflexion. Ce projet est pour la Xbox360, qui fonctionne sur le cadre compact et a donc un éboueur lent - cela signifie qu'il est absolument vital que j'évite les allocations

La seule façon que je l'ai trouvé pour ce faire est:

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

Je n'aime pas ce pour 2 raisons:

  • Le casting est pour les potiers, les génériques est pour les programmeurs
  • Il crée évidemment des ordures chaque fois que je dois obtenir une valeur primitive et il s'emballé.

Y at-il une méthode générique pour obtenir la valeur d'une propriété, qui ne sera pas la boîte primitives?

EDIT :: En réponse à la réponse Jons, ce code volé son blog ne provoque pas d'allocations, le problème est résolu:

        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");
        }
Était-ce utile?

La solution

Une alternative serait de créer un délégué de la méthode getter utilisant Delegate.CreateDelegate -. Je ne sais pas si cela est pris en charge sur la version compact framework utilisé par la Xbox si

J'ai un

scroll top