Avatar billede thomasnohrhansen Nybegynder
03. december 2003 - 18:12 Der er 10 kommentarer og
1 løsning

Hvordan checker systematisk variablerne i et objekt

public class a
{
int var1,var2,var3,var4......
}


public void funk( objekt a)
{
for(;;)
{
  Her vil jeg gennemløbe alle variablerne i objektet a    f.eks med en counter
}

}
Avatar billede repsak Nybegynder
03. december 2003 - 18:21 #1
du kan ikke 'gennemløbe' 4 variabler (hvis jeg forstår dig ret). Vil du udskrive dem?
Avatar billede arne_v Ekspert
03. december 2003 - 18:28 #2
Hvis du vil det er du nødt til at bruge reflection.
Avatar billede thomasnohrhansen Nybegynder
03. december 2003 - 18:29 #3
Lad os sige at objekt "a" indeholder 100 forskellige variabler af vilkårlig type og jeg ønske at gennemløbe dem alle og udskrive variablen hvis den ikke er null
Avatar billede nielsbrinch Nybegynder
03. december 2003 - 18:31 #4
Det er ikke noget man normalt gør. Du kan evt. lægge variablerne ind i en ArrayList og gennemløbe den i stedet.

Der er muligvis alligevel en måde at gøre det du beskriver, man kan i hvert fald i Java, men det er slet ikke spor nemt. Jeg anbefaler du lægger variablerne ind i en eller anden datastruktur og gennemløber dem med en IEnumerator.
Avatar billede nielsbrinch Nybegynder
03. december 2003 - 18:31 #5
Jeg trækker mit svar tilbage
Avatar billede arne_v Ekspert
03. december 2003 - 18:31 #6
Eksempel:

using System;
using System.Reflection;

class MainClass
{
    public static void Main(string[] args)
    {
        MemberInfo[] members = typeof(a).GetMembers();
        foreach(MemberInfo member in members)
        {
            Console.WriteLine(member.Name);
        }
    }
}

public class a
{
    public int var1,var2,var3,var4;
}
Avatar billede nielsbrinch Nybegynder
03. december 2003 - 18:33 #7
Type MyType =Type.GetType("a"); // klassen er 'a'
        MemberInfo[] Mymemberinfoarray = MyType.GetMembers();

        foreach (MemberInfo Mymemberinfo in Mymemberinfoarray)
        {
            Console.Write("\n" + Mymemberinfo.Name + " reflected type - " +
                Mymemberinfo.ReflectedType);
        }

Det her virker måske - har ikke testet
Avatar billede thomasnohrhansen Nybegynder
03. december 2003 - 18:34 #8
Tak for hjjælpe.....
Avatar billede nielsbrinch Nybegynder
03. december 2003 - 18:37 #9
Jeg er for langsom :-)
Avatar billede arne_v Ekspert
03. december 2003 - 18:50 #10
I en lidt mere avanceret udgave:

using System;
using System.Reflection;

class MainClass
{
    public static void Main(string[] args)
    {
        A a = new A();
        a.var1 = 1;
        a.var2 = 2;
        a.var3 = 3;
        a.var4 = 4;
        MemberInfo[] members = typeof(A).GetMembers();
        foreach(MemberInfo member in members)
        {
            if(member.MemberType == MemberTypes.Field)
            {
                int var = (int)typeof(A).InvokeMember(member.Name,
                                                      BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
                                                      null,
                                                      a,
                                                      null);

                Console.WriteLine(member.Name + " = " + var);
            }
        }
    }
}

public class A
{
    public int var1,var2,var3,var4;
}
Avatar billede arne_v Ekspert
03. december 2003 - 18:51 #11
Der er en masse guf i den her artikel:

http://my.execpc.com/~gopalan/dotnet/reflection.html
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester