"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo recuperar dinámicamente los valores de los atributos de una clase en tiempo de ejecución?

¿Cómo puedo recuperar dinámicamente los valores de los atributos de una clase en tiempo de ejecución?

Publicado el 2025-02-07
Navegar:887

How Can I Dynamically Retrieve Attribute Values from a Class at Runtime?

Atributos de búsqueda de tiempo de ejecución

Este artículo presenta un método general para acceder dinámicamente y extraer valores de propiedad de una clase.

use el método especial

Defina un método común que acepte parámetros de tipo:

public string GetDomainName()
]]

dentro del método:

  • use typeof (t) .getCustomAttributes para recuperar atributos personalizados:

      var dnAttribute = typeof(T).GetCustomAttributes(
        typeof(DomainNameAttribute), true
      ).FirstOrDefault() as DomainNameAttribute;
  • Si la propiedad existe, su valor se devuelve:

      if (dnAttribute != null)
      {
        return dnAttribute.Name;
      }
  • de lo contrario, return null:

      return null;
    ]

Método de extensión de utilidad

Para una aplicabilidad más amplia, generalice este método para manejar cualquier atributo:

public static class AttributeExtensions
{
    public static TValue GetAttributeValue(
        this Type type, 
        Func valueSelector) 
        where TAttribute : Attribute
}

dentro del método de extensión:

  • recuperar propiedades personalizadas:

      var att = type.GetCustomAttributes(
        typeof(TAttribute), true
      ).FirstOrDefault() as TAttribute;
  • Si el atributo existe, use el valor proporcionado para extraer el valor requerido:

    ]
      if (att != null)
      {
        return valueSelector(att);
      }
  • de lo contrario, devuelva el valor predeterminado de este tipo:

      return default(TValue);
    ]]

Ejemplo de uso

  • recuperar domainName atributo de myclass :
string name = typeof(MyClass).GetDomainName();
  • recupere cualquier valor de atributo de myclass usando el método de extensión:
string name = typeof(MyClass)
    .GetAttributeValue((DomainNameAttribute dna) => dna.Name);
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3