Obtenga los atributos personalizados de un miembro específico
-
03-07-2019 - |
Pregunta
¿Hay alguna forma de obtener los atributos personalizados de un objeto específico que estoy recibiendo en un método?
No quiero ni puedo iterar sobre Type.GetMembers () y buscar mi miembro. Tengo el objeto, que también es miembro, que tiene el atributo.
¿Cómo obtengo el atributo?
class Custom
{
[Availability]
private object MyObject = "Hello";
private void Do(object o)
{
//does object 'o' has any custom attributes of type 'Availability'?
}
//somewhere I make the call: Do(MyObject)
}
Solución
No. Los objetos no tienen atributos, los miembros los tienen. Cuando estés en el " Hacer " método, no hay registro del hecho de que llamaste Do (MyObject) vs Do (MyOtherFieldWhichHasTheSameValue).
Si necesita buscar los atributos en un miembro, básicamente tendrá que pasar la información de miembro relevante, no lo que suceda para evaluar.
Otros consejos
No puedes hacer esto sin al menos 1 llamada de reflexión. Después de eso, guarda el valor de alguna manera.
Ejemplo:
abstract MyBase
{
public string Name;
protected MyBase()
{
//look up value of Name attribute and assign to Name
}
}
[Name("Foo")]
class MyClass : MyBase
{
}