Provare a creare due dizionari di delegati emessi per consentire prestazioni migliorate durante l'acquisizione/impostazione dinamica dei valori delle proprietà.Impossibile associare al metodo di destinazione durante la creazione di delegati per le proprietà
Codice:
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()));
Tuttavia ottengo la seguente eccezione:
non può legarsi al metodo di destinazione perché la sua firma o la sicurezza trasparenza non è compatibile con quello del tipo delegato.
Da quello che ho letto questo sarà causato dalle proprietà/indicizzata/tipo valore statico, la raccolta Properties
contiene immobili statiche o indicizzate ma però necessario far funzionare oggetti di tipo valore come int
e double
.
Come posso creare i getter/setter di cui ho bisogno mantenendo il mio codice astratto ed evitando i generici?
Come si fa a creare 'Properties'? E quando ottieni esattamente questa eccezione? –
Aggiunta la definizione della raccolta delle proprietà al codice incluso, ottengo l'eccezione quando il codice viene eseguito su un tipo. –
Si potrebbe voler aggiungere questa riga di codice, dove si ottiene un'eccezione. aiuterà anche a capire come userete questi dizionari. –