He escrito un atributo personalizado que uso en ciertos miembros de una clase:¿Obtiene el valor de una propiedad personalizada con atributo decorado?
public class Dummy
{
[MyAttribute]
public string Foo { get; set; }
[MyAttribute]
public int Bar { get; set; }
}
soy capaz de obtener los atributos personalizados del tipo y encontrar mi atributo específico. Lo que no puedo entender es cómo obtener los valores de las propiedades asignadas. Cuando tomo una instancia de Dummy y la paso (como un objeto) a mi método, ¿cómo puedo tomar el objeto PropertyInfo que obtengo de .GetProperties() y obtener los valores asignados a .Foo y .Bar?
EDIT:
Mi problema es que no puedo encontrar la manera de llamar adecuadamente GetValue.
void TestMethod (object o)
{
Type t = o.GetType();
var props = t.GetProperties();
foreach (var prop in props)
{
var propattr = prop.GetCustomAttributes(false);
object attr = (from row in propattr where row.GetType() == typeof(MyAttribute) select row).First();
if (attr == null)
continue;
MyAttribute myattr = (MyAttribute)attr;
var value = prop.GetValue(prop, null);
}
}
Sin embargo, cuando hago esto, la llamada prop.GetValue me da un TargetException - El objeto no coincide con el tipo de destino. ¿Cómo estructurar esta llamada para obtener este valor?
Acuerdo en FirstOrDefault: este es principalmente un ejemplo artificial para demostrar el problema, pero gracias por la ayuda. Duh, no puedo creer que fue eso. – Joe