Попытка создания двух словарей испущенных делегатов для повышения производительности при динамическом получении/настройке значений свойств.Невозможно привязываться к целевому методу при создании делегатов для свойств
Код:
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()));
Однако я получаю следующее исключение:
не может связываться с целевой метод, потому что его подпись или безопасность прозрачность не совместима с типом делегата.
Из того, что я прочитал это будет обусловлено свойствами статической/индексируются/тип значения, то Properties
коллекция не содержит статические или индексированные свойства, но я, тем не менее это нужно, чтобы работать для свойств типа значения, такие как int
и double
,
Как я могу создать геттеры/сеттеры, которые мне нужны, сохраняя мой код абстрактным и избегая дженериков?
Как создать 'Properties'? И когда именно вы получаете это исключение? –
Добавил определение коллекции свойств к включенному коду, я получаю исключение, когда код выполняется по типу. –
Возможно, вы захотите добавить эту строку кода, где вы получите исключение. это также поможет понять, как вы собираетесь использовать эти словари. –