質問

次の手順を実行する方法はありますか?私は、属性引数は定数式でなければならないことを参照href="https://stackoverflow.com/questions/392083/use-a-global-setting-as-an-attribute-argument"> 一部ののDataGridViewへのプロパティバインディングを使用して、いただきました次善の代替?

をロードしたくない場合
  class TestObj
  {
     private bool isBrowsable = false;

     [Browsable(isBrowsable)]
     public string String1
     {
        get
        {
           return "Foo";
        }
     }
     [Browsable(isBrowsable)]
     public string String2
     {
        get
        {
           return "Baz";
        }
     }
  }
役に立ちましたか?

解決

あなたは ICustomTypeDescriptor のインターフェース - しかし、これは属性を持つプロパティを飾るほど単純ではないの仕事のかなりのビットです。

他のヒント

ランタイムのために、私はあなたがおそらくICustomTypeDescriptorを見ていると思います。それはコンパイル時に決定した場合は、コンパイラディレクティブを使用している可能性があります:


 #define ISBROWSABLE
 #if ISBROWSABLE
 [your attribute]
 #endif

あなたはと同様のアプローチを使用して、いくつかの設定ファイルやデータベースから値を読み込むことができます 私の属性に動的な値を設定する方法のクラスとプロパティ名を渡すことにより、例えば、

[IsBrowsable( "クラス名"、 "プロパティ名")

しかし、明白ですし、何とか反射から決定することができるはず文字列名として入力する迷惑になります。 あなたは私たちに、このようなPostSharpまたはFodyとしてILウィーバーツールを試すことができます。(私は信じて、彼らはできるようには考えてやってますが、今の例を持っていないこと)☑

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