4

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

  class TestObj
  {
     private bool isBrowsable = false;

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

3 回答 3

7

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

于 2009-07-07T16:55:54.760 回答
3

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


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

于 2009-07-07T17:12:34.350 回答
0

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

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

但是,键入字符串名称会很烦人,这是显而易见的,并且应该能够从反射中确定。你可以试试我们的IL Weaver工具,比如PostSharp或者Fody。(我相信他们有能力做这样的想法,但现在没有例子)☑</p>

于 2017-01-01T00:49:14.417 回答