【问题标题】:C# Dynamic Attribute ArgumentsC# 动态属性参数
【发布时间】:2009-07-07 16:46:01
【问题描述】:

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

  class TestObj
  {
     private bool isBrowsable = false;

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

【问题讨论】:

  • 你想在编译时还是运行时决定这个?

标签: c# properties attributes browsable


【解决方案1】:

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

【讨论】:

【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      相关资源
      最近更新 更多