» »

[c#] loopanje po fieldih classa

[c#] loopanje po fieldih classa

DuleKrtola ::

Imam class z ~5 fieldi. V temu classu bi imel še metodo, ki loopa čez vse fielde.
mojKlass instanca = new mojKlass();

funkcija
void doLoop
{
  Type type = instanca.GetType();
  FieldInfo[] fields = type.GetFields();
            
    foreach (FieldInfo field in fields)
    {
        string imeFilda = field.Name;
        var vrednostFielda = field.GetValue(instanca);
        // stuff
    }
}


Zdej ta funkcija ni definirana v classu, kličem jo
doLoop(instanca);

in deluje. Rad bi pa imel to funkcijo kot metodo v classu, se pravi, da bi jo klical
instanca.doLoop();

ampak me jebe getValue(object obj). Pač podat mu je treba instanco classa iz katere pobira vrednosti fieldov. "this" ne paše tja, kako torej to naredim?

darkolord ::

Zakaj this ne bi pasal tja?

luli ::

Class a = ...
PropertyInfo[] properties = A.GetType().GetProperties();
...
dalje s foreach

DuleKrtola ::

darkolord je izjavil:

Zakaj this ne bi pasal tja?

Ne vem, nek exception vrže.

luli, kot sem napisal, funkcija že dela. Js bi jo rad definiru kot metodo classa, ne kot neko zunanjo funkcijo. Tista 9. vrstica je problematična. Je kak drug način kako iterativno dobit vrednosti fielda "imeFielda" namesto uporabe "GetValue()"

DuleKrtola ::

No, zdej sem nahitr probal ponovit napako da bi prilepil tist exception in zadeva dela. Mogoče imam na šihtu starejši .net, ali pa sem naredu kako drugo neumnost. Bom vidu v ponedeljek

darkolord ::

this je ok. Verzija frameworka nima veze...

    public class mojKlass
    {
        public string testField = "Test";

        public void doLoop()
        {
            Type type = this.GetType();
            FieldInfo[] fields = type.GetFields();

            foreach (FieldInfo field in fields)
            {
                string imeFilda = field.Name;
                var vrednostFielda = field.GetValue(this);

                Console.WriteLine(vrednostFielda);
                // stuff
            }
        }
    }

Zgodovina sprememb…

luli ::

Torej naredi nov class z dedovanjem

public class tisti_ki_bo_dedoval : mojKlass
{
public void doLoop()
{
...
}
}

Potem pa :
tisti_ki_bo_dedoval = new tisti_ki_bo_dedoval()

V tem novem razredu boš imel metodo doLoop

Če pa imaš source od klassa pa pač v njem definiraš metodo.

Popravljeno :
Daj ti rajši primer class-a, da bomo sploh videli kaj rabiš. Iz opisa se ne da izluščit.

Glede na primere bi moral delati null.

Zgodovina sprememb…

  • spremenilo: luli ()

DuleKrtola ::

Evo, pogruntal. Za to aplikacijo sem vzel en starejši podoben projekt, in sem spremenil namespace. Zato this ni delal. Form.cs in mojKlass sta sicer bila v istem NS, zdaj sem spremenil še default NS v project properties, pa še vedno ne dela :S

Nč, nov projekt pa kopi-pejst kode

vojko20 ::

Si spremenil namespace še v Form.Designer.cs?


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Wordpress custom plugin

Oddelek: Izdelava spletišč
16989 (834) Gandalfar
»

Kontakt obrazec

Oddelek: Izdelava spletišč
62061 (1906) betmen
»

[Java] Objekt poslan k metodi v kakšnem stanju?

Oddelek: Programiranje
211548 (995) shadeX
»

C# Program

Oddelek: Programiranje
393097 (2020) Spura
»

[C++]Instanca razreda

Oddelek: Programiranje
81541 (1432) Senitel

Več podobnih tem