typedescriptor.addattributes()は、それを追加する現在の属性Inseadを置き換えます

StackOverflow https://stackoverflow.com/questions/3997471

質問

コードのこの部分を持っています:

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つの問題があります。

  1. 何らかの理由で、OfTypeは空のIENUMERABLEを返しますが、そのタイプの正しい属性を返すはずであり、確認しました。それらは存在します。
  2. これは深刻な問題です。属性を追加する代わりに、同じタイプの古い属性をcrmtypeattributeに置き換えます。 AllowMultipleが真実であることをマークしました。

このコードの何が問題なのか教えてもらえますか?
編集:
何らかの理由で、属性タイプの属性を1つだけ追加できるようになり、実行時に別の属性タイプを追加し、機能しました。

役に立ちましたか?

解決 2

属性は、属性クラスのTypeIDプロパティをオーバーライドする必要があることがわかりました。
見る ここ 詳細については、それは非常に隠されており、Getattributesでも言及する必要があります。

他のヒント

あなたの問題はあなたが返されたことを無視しているという事実に起因すると思います TypeDescriptionProvider から AddAttributes 電話。

リフレクターから TypeDescriptor.AddAttributes:

ターゲットコンポーネントタイプにクラスレベルの属性を追加します。

パラメーター

タイプ: : Type ターゲットコンポーネントの。

属性: :の配列 Attribute コンポーネントのクラスに追加するオブジェクト。

返品値: :新しく作成されたもの TypeDescriptionProvider これは、指定された属性を追加するために使用されました。

常に新しいものがあります TypeDescriptionProvider その静的方法を呼び出すときに作成されたインスタンス。さらなる属性を追加し、最近アドレス属性をクエリするときは、この新たに作成されたプロバイダーインスタンスに依存する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top