[C#] Value van een property

Pagina: 1
Acties:

  • robertpNL
  • Registratie: Augustus 2003
  • Niet online
Hallo,

Ik zit even vast, misschien dat jullie mij verder op weg kunnen helpen?

Ik heb een variabel met een referentie naar een struct, en nu loop ik alle properties daarvan voorbij d.m.v. System.Reflection.PropertyInfo. De reden dat ik dit doe is i.v.m. de CustomAttributes aan verschillende properties.

Nu wil ik tijdens het aflopen van alle properties de waarde (value) van een property weten. Maar ik denk dat ik hier GetValue() voor moet gebruiken, maar dan krijg ik een foutmelding.

De hele code bij elkaar:

code:
1
2
3
4
5
6
7
8
9
10
11
12
// De struct heet test, variabel xy.
// De struct bestaat uit twee getters: X en Y. Input via de constructor.
test xy = new test(1,2);

// We lopen nu iedere property van xy af.
foreach (System.Reflection.PropertyInfo pi in xy.GetType().GetProperties())
{
     // Wat is de naam van de propertie?
     Console.WriteLine("name = " + pi.Name); // Return X, klopt dus
     // en wat is de waarde?
     object y = pi.GetValue(null, null); // Foutmelding! Ik verwacht "1" (string)
}


De foutmelding op de code hierboven is "Non-static method requires a target."

Wie helpt mij even verder op weg? :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 01:15
PropertyInfo is een class die informatie bevat over de 'property-definitie'. Deze class weet dus niets af over de waarde die zo'n property kan bevatten (wat op zich best logisch is, want anders zou je een te sterke koppeling hebben tussen PropertyInfo en je object zelf.

Als je de waarde van een property wilt opvragen, moet je dus idd met die GetValue method aan de slag, maar je moet als parameter alleszins het object meegeven die zo'n property heeft, en waarvan je de waarde wilt weten.
In jouw geval dus:
code:
1
object y = pi.GetValue (xy, null);

https://fgheysels.github.io/


  • robertpNL
  • Registratie: Augustus 2003
  • Niet online
WhoAmi :)

Ik zat je reactie te lezen, en tijdens het lezen ginger een lampje bij mij branden. Wat jij zegt, PropertyInfo is puur om je informatie over je property mee op te vragen, niet de waarde.

GetValue werkt nu, harstikke bedankt. :)