有没有办法做到以下几点?我看到的属性参数必须是常量表达式,所以我将如何解决此问题?如果我不想加载的一些的使用结合,什么的下一个最佳选择的属性分为一个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( “类名”, “PROPERTYNAME”)]

然而,将是恼人的类型作为字符串名称,即是显而易见的,不管怎样应该能够从反射来确定。 您可以尝试我们IL韦弗工具,如PostSharp或Fody。(我相信,他们有能力做到这样认为,但没有一个例子刚才)☑

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top