【问题标题】:Generate multiple attribute?生成多个属性?
【发布时间】:2010-04-12 19:30:38
【问题描述】:

ATM 我无法安静想象这将如何工作。我确信它可以做到。我注意到我的属性中有一个模式使用,我总是一起使用 3 个特定属性。以下面为例

    [MyAttr(4, @"a"),
     MyAttr(41, "b"),
     MyAttr(45, "ab")]

我的要复杂得多,但我想定义一个具有更多参数的属性来生成上面的数据。我该怎么做?假设我的一个属性看起来像这样

MyAttr2(4, 41, "a", "b"); //4+41=45, "a"+"b" = "ab"

如何使用 MyAttr2 生成 3 MyAttr 以应用于类?

【问题讨论】:

  • 你的意思是同一个属性有不同的构造函数吗?
  • 不,我的意思是代码将查看 MyAttr 并且有 3 个不同的指令,我想生成 3 个而不添加逻辑来检查 MyAttr2 并复制 3 个指令。
  • 所以,基本上您希望必须访问一个“MyAttr2”属性,该属性将传播放置在同一类型的“MyAttr”属性中的所有值?如果是这样,您能否将“MyAtt2”作为任何“MyAtt”属性之上的外观?
  • Marvin Smit:我想我可以,但怎么做?

标签: c# attributes custom-attributes


【解决方案1】:

C# 编译器无法将程序集元数据中的单个属性条目转换为多个。但是,您可以对属性进行建模,例如将附加属性信息公开为属性(或集合)。但是,子信息将无法通过反射作为独立属性直接访问。

【讨论】:

  • 嗯,我需要修改 MyAttr 的代码逻辑吗?还是我可以不理会它,并在无法直接访问儿童信息的限制下按照您的建议进行操作?
  • 如果您通过某些集合/属性将详细信息作为单个属性公开的一部分,那么您将需要更改现有代码。如果没有更多关于您正在做什么以及在多少情况下可以整合多个属性的详细信息,很难说哪种设计更适合您的需求。但是,子属性方法将是一个突破性的变化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2012-05-23
相关资源
最近更新 更多