Pisałem niestandardowych atrybutów, które używam na niektórych członków klasy:Uzyskaj wartość z niestandardowej właściwości zdobionej przez atrybut?
public class Dummy
{
[MyAttribute]
public string Foo { get; set; }
[MyAttribute]
public int Bar { get; set; }
}
jestem w stanie uzyskać atrybutów niestandardowych od rodzaju i znaleźć konkretny atrybut. Nie mogę wymyślić, jak to zrobić, aby uzyskać wartości przypisanych właściwości. Kiedy biorę instancję Dummy i przekazuję ją (jako obiekt) do mojej metody, jak mogę zabrać obiekt PropertyInfo, który otrzymam z powrotem od .GetProperties() i uzyskać wartości przypisane do .Foo i .Bar?
EDIT:
Moim problemem jest to, że nie mogę dowiedzieć się, jak prawidłowo zadzwonić 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);
}
}
Jednak, kiedy to zrobić, wywołanie prop.GetValue daje mi TargetException - Obiekt nie pasuje typu docelowego. Jak zorganizować to połączenie, aby uzyskać tę wartość?
Uzgodnione na FirstOrDefault - jest to głównie wymyślny przykład, aby zademonstrować problem, ale dzięki za pomoc. Duh, nie mogę uwierzyć, że to było to. – Joe