Avatar billede jensbo Nybegynder
31. juli 2007 - 13:12 Der er 5 kommentarer og
1 løsning

Iterate over methods

Hej

Jeg har følgende metoder i en klasse.

public String test1(){return "test1"}
public String test2(){return "test2"}
public String test3(){return "test3"}
public String test4(){return "test4"}
public String test5(){return "test5"}
.
.
public String test100(){return "test100"}
osv.

Findes der en smart måde at "iterate" over de metoder fra c#???
Jeg ville gerne slippe for at ha en
test.test1
test.test2
osv. for hver metode, det bliver mange linier.
Men hvis der ikke gør så må jeg lave det på en lidt anden måde.
Avatar billede arne_v Ekspert
31. juli 2007 - 15:11 #1
Til inspiration:

using System;
using System.Reflection;

namespace E
{
    public class Demo
    {
        public static void Main(string[] args)
        {
            Demo o = new Demo();
            o.CallAllTestMethods();
        }
        public void CallAllTestMethods()
        {
            MethodInfo[] allm = typeof(Demo).GetMethods();
            foreach(MethodInfo m in allm)
            {
                if(m.Name.StartsWith("Test"))
                {
                    m.Invoke(this, new object[] { });
                }
            }
        }
        public static void Test1()
        {
            Console.WriteLine("Test 1");
        }
        public static void Test2()
        {
            Console.WriteLine("Test 2");
        }
    }
}
Avatar billede jensbo Nybegynder
31. juli 2007 - 15:27 #2
lækkert....... Lige hvad jeg manglede
Avatar billede jensbo Nybegynder
31. juli 2007 - 15:29 #3
Ville gerne giv dig points men jeg kan ikke finde udad det.
Avatar billede arne_v Ekspert
31. juli 2007 - 15:33 #4
Saa vil jeg smide et svar.
Avatar billede arne_v Ekspert
31. juli 2007 - 15:38 #5
Jeg skal smide et svar foerst. Saa kan du markere mit navn i combo boxen og klikke
accepter.
Avatar billede nielle Nybegynder
31. juli 2007 - 18:48 #6
Et muligt alternativ:

class Program
{
    public delegate string TestDelegate();

    // Enhver testX funktion passer ind i TestDelegate skabelonen.
    public string test1() { return "test1"; }
    public string test2() { return "test2"; }
    public string test3() { return "test3"; }
    public string test4() { return "test4"; }
    public string test5() { return "test5"; }
    public string test100() { return "test100"; }

    static void Main(string[] args)
    {
        Program prog = new Program();
        prog.Test();
    }

    public void Test()
    {
        TestDelegate[] testArr = { test1, test2, test3, test4, test5, test100 };

        foreach (TestDelegate test in testArr)
        {
            string testRes = test();
            Console.WriteLine(testRes);
        }
    }
}

- selvom den selvfølgelig ikke helt opfylder dit kriterie om at undgå noget i stil med:

test.test1
test.test2
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