Ne peut pas se lier à la cible de la méthode lors de la création de délégués pour les propriétés

En essayant de créer deux dictionnaires d'émissions de délégués pour permettre l'amélioration de la performance lors de l'dynamiquement obtenir/définir les valeurs des propriétés.

Code:

  Properties = type.GetProperties(BindingFlags.Public | BindingFlags.Instance)
                    .Where(p => p.CanRead && !p.GetIndexParameters().Any())
                    .AsEnumerable();
  PropertyGetters = Properties.ToDictionary(p => p.Name, p => (Func<object, object>)Delegate.CreateDelegate(typeof(Func<object, object>), p.GetGetMethod()));
  PropertySetters = Properties.Where(p => p.GetSetMethod() != null)
                    .ToDictionary(p => p.Name, p => (Action<object, object>)Delegate.CreateDelegate(typeof(Action<object, object>), p.GetSetMethod()));

Mais j'ai l'exception suivante:

Ne peut pas se lier à la cible de la méthode en raison de sa signature ou de sécurité
la transparence n'est pas compatible avec le type de délégué.

De ce que j'ai lu ce seront causés par l'électricité statique/indexés/type de la valeur des propriétés, les Properties collection contient pas de charges ou d'indexer les propriétés, mais toutefois, j'ai besoin de ce travail pour le type de valeur des propriétés telles que int et double.

Comment puis-je créer les getters/setters que j'ai besoin tout en gardant mon code abstrait et en évitant les génériques?

Comment voulez-vous créer Properties? Exactement quand et vous obtenez cette exception?
Ajout de la collection de propriétés de définition de la inclus code, j'obtiens l'exception lorsque le code est exécuté sur un type.
Vous pouvez ajouter cette ligne de code, où vous obtenez une exception. il aidera aussi à comprendre, c'est comment vous allez utiliser ces dictionnaires.
La ligne où je reçois l'exception est juste le PropertyGetters de l'assignation, le code où elle est appelée à partir est juste une classe abstraite constructeur. Cependant j'ai tout simplement l'intention de les utiliser pour obtenir et définir les valeurs dynamiquement, donc, fondamentalement, je veux cache émis accesseurs et de les utiliser où chaque j'ai l'habitude d'être à l'aide de PropertyInfo.GetValue()

OriginalL'auteur Alex Hope O'Connor | 2013-07-02