2009-07-07 97 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(我相信他们能够做这样的想法,但是刚才没有例子)☑