Estoy tratando de crear un método genérico que leerá un atributo en una clase y devolverá ese valor en tiempo de ejecución. ¿Cómo haría esto?
Nota: El atributo DomainName es de la clase DomainNameAttribute.
[DomainName("MyTable")]
Public class MyClass : DomainBase
{}
Lo que estoy tratando de generar:
//This should return "MyTable"
String DomainNameValue = GetDomainName<MyClass>();
c#
generics
custom-attributes
Zaffiro
fuente
fuente
Respuestas:
ACTUALIZAR:
Este método podría generalizarse aún más para trabajar con cualquier atributo:
y use así:
fuente
const Filed
en una clase estática?Ya existe una extensión para hacer esto.
Entonces:
fuente
fuente
Usé la respuesta de Darin Dimitrov para crear una extensión genérica para obtener atributos de miembro para cualquier miembro de una clase (en lugar de atributos para una clase). Lo estoy publicando aquí porque otros pueden encontrarlo útil:
Ejemplo de uso:
fuente
Una versión simplificada de la primera solución de Darin Dimitrov:
fuente
Aquí hay un buen tutorial si no lo ha visto antes http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx
De particular interés para usted es la sección aquí, llamada Acceso al atributo http://msdn.microsoft.com/en-us/library/aa288454(VS.71).aspx#vcwlkattributestutorialanchor3
fuente
Probablemente tan fácil de usar como el cuerpo de la función genérica en línea. No tiene ningún sentido para mí hacer que la función sea genérica sobre el tipo MyClass.
fuente
En caso de que alguien necesite un resultado anulable y para que esto funcione en Enums, PropertyInfo y clases, así es como lo resolví. Esta es una modificación de la solución actualizada de Darin Dimitrov.
Ejemplos de uso:
fuente
En lugar de escribir mucho código, simplemente haga esto:
fuente
fuente