2009-07-07 99 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

你想在編譯時做出決定時間還是運行時間? – 2009-07-07 16:54:28

+0

如果可能,運行時 – SwDevMan81 2009-07-07 17:07:25

回答

6

您可以通過實現ICustomTypeDescriptor接口提供了在運行時動態自定義類型信息 - 但是這是相當多的工作在幾乎沒有那麼簡單,帶屬性的裝飾性。

3

對於運行時,我認爲你可能正在看ICustomTypeDescriptor。如果它是一個編譯時決定的,你也可以使用編譯器指令:

 

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

你可以通過類和屬性名,例如加載使用類似的方法一些配置文件或數據庫值 How to set dynamic value in my Attribute

[IsBrowsable(「類名」,「PROPERTYNAME」)]

然而這將是惱人的鍵入作爲字符串名稱,即是顯而易見的,不管怎樣應該能夠從反射來確定。 你可以試試我們的IL Weaver工具,比如PostSharp或者Fody(我相信他們能夠做這樣的想法,但是剛纔沒有例子)☑