C#动态属性参数(C# Dynamic Attribute Arguments)

2019-06-25 06:56发布

有没有办法做到以下几点? 我看到的属性参数必须是常量表达式,那么我将如何解决此问题? 如果我不想使用绑定,请告诉我下一个最佳选择加载特性到一个DataGridView?

  class TestObj
  {
     private bool isBrowsable = false;

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

Answer 1:

您可以通过实现在运行时提供动态自定义类型信息ICustomTypeDescriptor接口-但是这是相当多的工作在几乎没有与属性装饰特性一样简单。



Answer 2:

运行时,我认为你可能看ICustomTypeDescriptor。 如果它是一个编译时决定的,你也可以使用编译器指令:


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



Answer 3:

您可以使用类似的方法,从一些配置文件或数据库加载值如何在我的属性设置动态价值通过传递类和属性的名称,如

[IsBrowsable( “类名”, “PROPERTYNAME”)]

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



文章来源: C# Dynamic Attribute Arguments