Avatar billede repsak Nybegynder
16. november 2004 - 10:10 Der er 5 kommentarer og
1 løsning

Returnere alle public fields plus værdi fra object

Kan det lade sig gøre (evt. via Reflections) at lave en metode som kan returnere navn + værdi for alle public fields for et vilkårligt object som streng.

Pseudo:

public string GetFields(object o){
  stringbuilder sb
  foreach(public_field_i_o_som_kan_være_af_hvilken_som_helst_type){
    sb.append(o.fieldname + ": " + o.fieldvalue)
  }
  return sb.tostring()
}

Kan man det?
Det er måske mest normalt at lave det manuelt som ToString(), men da alle mine tostring er opbygget som beskrevet kunne en gennerel metode være smart :-)
Avatar billede arne_v Ekspert
16. november 2004 - 10:31 #1
Ja
Avatar billede arne_v Ekspert
16. november 2004 - 10:31 #2
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
16. november 2004 - 10:32 #3
using System;
using System.Reflection;

class MainClass
{
    public static void Main(string[] args)
    {
        A a = new A();
        B b = new B();
        Display(a);
        Display(b);
    }
    public static void Display(object o)
    {
        Console.WriteLine("This is a " + o.GetType().Name);
        MemberInfo[] members = o.GetType().GetMembers();
        foreach(MemberInfo member in members)
        {
            if(member.MemberType == MemberTypes.Field)
            {
                int var = (int)o.GetType().InvokeMember(member.Name,
                                                        BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
                                                        null,
                                                        o,
                                                        null);
                Console.WriteLine(member.Name + " = " + var);
            }
        }
    }
}

class A
{
    public int var1 = 10;
}

class B
{
    public int var2 = 100;
}
Avatar billede arne_v Ekspert
16. november 2004 - 10:32 #4
Det var lige hvad jeg havde liggende - ret selv til.
Avatar billede repsak Nybegynder
16. november 2004 - 11:03 #5
Cool. Jeg takker.
Post et svar :-)
Avatar billede arne_v Ekspert
16. november 2004 - 11:12 #6
svar
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