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);
}
2つの問題があります。
- 何らかの理由で、OfTypeは空のIENUMERABLEを返しますが、そのタイプの正しい属性を返すはずであり、確認しました。それらは存在します。
- これは深刻な問題です。属性を追加する代わりに、同じタイプの古い属性をcrmtypeattributeに置き換えます。 AllowMultipleが真実であることをマークしました。
このコードの何が問題なのか教えてもらえますか?
編集:
何らかの理由で、属性タイプの属性を1つだけ追加できるようになり、実行時に別の属性タイプを追加し、機能しました。
解決 2
属性は、属性クラスのTypeIDプロパティをオーバーライドする必要があることがわかりました。
見る ここ 詳細については、それは非常に隠されており、Getattributesでも言及する必要があります。
他のヒント
あなたの問題はあなたが返されたことを無視しているという事実に起因すると思います TypeDescriptionProvider
から AddAttributes
電話。
リフレクターから TypeDescriptor.AddAttributes
:
ターゲットコンポーネントタイプにクラスレベルの属性を追加します。
パラメーター
タイプ: :
Type
ターゲットコンポーネントの。属性: :の配列
Attribute
コンポーネントのクラスに追加するオブジェクト。返品値: :新しく作成されたもの
TypeDescriptionProvider
これは、指定された属性を追加するために使用されました。
常に新しいものがあります TypeDescriptionProvider
その静的方法を呼び出すときに作成されたインスタンス。さらなる属性を追加し、最近アドレス属性をクエリするときは、この新たに作成されたプロバイダーインスタンスに依存する必要があります。
所属していません StackOverflow