C#动态属性参数

时间:2009-07-07 16:46:02

标签: c# properties attributes browsable

有没有办法做到以下几点?我see,属性参数必须是一个常量表达式,那么我将如何解决这个问题呢?如果我不想使用绑定将某些属性加载到datagridview中,那么下一个最佳替代方案是什么?

  class TestObj
  {
     private bool isBrowsable = false;

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

3 个答案:

答案 0 :(得分:6)

您可以通过实现ICustomTypeDescriptor接口在运行时提供动态自定义类型信息 - 但这非常简单,只需要使用属性装饰属性就不那么简单了。

答案 1 :(得分:3)

对于运行时,我认为您可能正在查看ICustomTypeDescriptor。如果是编译时决定,您可以使用编译器指令:


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

答案 2 :(得分:0)

您可以使用类似的方法从某个配置文件或数据库加载值 How to set dynamic value in my Attribute通过传递类和属性名称,例如

[IsBrowsable(" classname"," propertyname")]

然而,键入字符串名称会很烦人,这很明显,并且应该能够从反射中确定。 您可以尝试使用IL Weaver工具,例如PostSharp或Fody。(我相信,他们有能力做到这一点,但是现在还没有例子)☑