【问题标题】:Accessing properties attribute inside the get accessor在 get 访问器中访问 properties 属性
【发布时间】:2010-08-20 00:14:17
【问题描述】:

我正在为我的属性创建一个自定义属性,并且想知道是否有人知道我如何访问 get 访问器中的属性值。

public class MyClass
{
    [Guid("{2017ECDA-2B1B-45A9-A321-49EA70943F6D}")]
    public string MyProperty
    {
        get { return "value loaded from guid"; }
    }
}

【问题讨论】:

  • 为什么不能只从属性中返回 GUID?为什么需要使用自定义属性?
  • @Timwi,我可以从属性中看到的唯一好处是,您可以在没有构造类的实例的情况下检查它,但是该类的用户也可以从实时实例中获取它,而无需直接使用反射。不确定这是否足以保证复杂性。
  • 这是一个简化的例子,返回的值将是从 Guid 加载的值,而不是返回 Guid 本身。
  • 这仍然无法解释为什么需要自定义属性以及为什么不能将 GUID 直接放在代码中。
  • 我可以,但我正在寻找一个可以存储 Guid 并且可以从多个地方访问的地方,例如获取,设置和外部的类。一直将 Guid 存储在常量文件中,但它变得非常大,因此我正在寻找更易于管理的解决方案。

标签: c# .net custom-attributes


【解决方案1】:

抛开这种事情的智慧......

public string MyProperty
{
    get
    {
        return this.GetType().GetProperty("MyProperty").GetCustomAttributes(typeof(GuidAttribute), true).OfType<GuidAttribute>().First().Value;
    }
}

【讨论】:

    【解决方案2】:

    您可以通过反射检索属性,然后检索其自定义属性,如下所示:

    // Get the property
    var property = typeof(MyClass).GetProperty("MyProperty");
    
    // Get the attributes of type “GuidAttribute”
    var attributes = property.GetCustomAttributes(typeof(GuidAttribute), true);
    
    // If there is an attribute of that type, return its value
    if (attributes.Length > 0)
        return ((GuidAttribute) attributes[0]).Value;
    
    // Otherwise, we’re out of luck!
    return null;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-21
      • 2013-10-07
      • 2021-12-05
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      相关资源
      最近更新 更多