Typedescriptor.addattributes () заменяет текущий атрибут Insead на добавление его
-
10-10-2019 - |
Вопрос
У меня есть эта часть кода:
var hasAttribute = TypeDescriptor.GetAttributes(property.DeclaringType).OfType<CrmTypeAttribute>()
.Any((attr)
=> ((CrmTypeAttribute)attr).Name == property.Name);
if (!hasAttribute)
{
var crmTypeAttribute = new CrmTypeAttribute(property.Name, crmType);
TypeDescriptor.AddAttributes(property.DeclaringType, crmTypeAttribute);
}
У него две проблемы:
- По какой -то причине, что Tothype возвращает пустую подставку, хотя он должен вернуть правильные атрибуты такого типа, и я проверил. Они существуют.
- Это серьезная проблема. Вместо того, чтобы добавлять атрибут, он заменяет старый атрибут того же типа CrmtyPeatTribute. Я отметил, что Alluctmultiple будет правдой.
Кто -нибудь может сказать мне, что не так с этим кодом?
РЕДАКТИРОВАТЬ:
По какой -то причине он позволяет добавлять только один атрибут типа атрибута, я добавил еще один тип атрибута во время выполнения, и он работал.
Решение 2
Оказывается, атрибут должен переопределить свойство типа класса атрибутов, чтобы не рассматриваться как дублированный.
Видеть здесь Для получения подробной информации это очень скрыто и должно быть упомянуто и в Getattributes.
Другие советы
Я думаю, что ваша проблема проистекает из того факта, что вы игнорируете возвращенных TypeDescriptionProvider
от AddAttributes
вызов.
От отражателя TypeDescriptor.AddAttributes
:
Добавляет атрибуты на уровне класса к типу целевого компонента.
Параметры
тип:
Type
целевого компонента.атрибуты: Множество
Attribute
Объекты, чтобы добавить в класс компонента.Возвращаемое значение: Недавно созданный
TypeDescriptionProvider
Это использовалось для добавления указанных атрибутов.
Всегда есть новый TypeDescriptionProvider
экземпляр создан при вызове этого статического метода. Вы должны полагаться на этот недавно созданный экземпляр поставщика при добавлении дополнительных атрибутов, а также запроса на недавно добавленные атрибуты.