2009-07-07 21 views
3

以下の方法がありますか?私はsee属性引数は定数式でなければならないので、どうすればこの問題を回避できますか?私がバインドを使用してのプロパティをdatagridviewにロードしたくない場合は、次の最良の選択肢は何ですか?C#動的属性の引数

class TestObj 
    { 
    private bool isBrowsable = false; 

    [Browsable(isBrowsable)] 
    public string String1 
    { 
     get 
     { 
      return "Foo"; 
     } 
    } 
    [Browsable(isBrowsable)] 
    public string String2 
    { 
     get 
     { 
      return "Baz"; 
     } 
    } 
    } 
+0

これをコンパイル時に決定しますか?時間または実行時間? –

+0

可能であればランタイム – SwDevMan81

答えて

6

あなたはICustomTypeDescriptorインタフェースを実装することで、実行時に動的なカスタム型情報を提供することができます - しかし、これは属性を持つプロパティを飾るほど単純ではないの仕事のかなりのビットです。

+0

これの簡単な例やこれを行う方法を示すサイトはありますか?おかげで – SwDevMan81

+0

グリッドをローカライズするインターフェイスを使用する例を次に示します。 http://www.codeguru.com/csharp/csharp/cs_controls/propertygrid/article.php/c4795 –

+0

もう1つ。 http://www.codeproject.com/KB/tabs/customizingcollectiondata.aspx –

3

実行時には、おそらくICustomTypeDescriptorを見ていると思います。それはコンパイル時間決定した場合は、コンパイラディレクティブを使用することもできました:

 

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

あなたは、例えば、クラスやプロパティ名を渡すことで How to set dynamic value in my Attributeと同様のアプローチを使用して、いくつかの設定ファイルやデータベースから値を読み込むことができます

[IsBrowsable(「クラス名」、「プロパティ名」)]、明らかである文字列名として入力する迷惑となり、何とか反射から決定することができるはずしかし

。 PostSharpやFodyのようなIL Weaverツールを試すことができます(私はそう思っていますが、今考えている例はありません)☑