Avatar billede Droa Seniormester
23. oktober 2009 - 10:22 Der er 6 kommentarer og
1 løsning

Pointers

Hej eksperter, jeg er igang med og lave en funktion, der kan angive nogen variabler, efter hvad den får af input.



public string setVars(string arg,string value,source s)
{
switch(arg)
{
case "autoupdate":
return "(OK!)";
case "core":
return "(OK!)";
default:
return "(ERROR)";
}


den har kun 2 sæt variabler, den kan sætter i min klasse.


        private string autoupdate;
        private bool autoupdate_set_by_arg;
        private string core;
        private bool core_set_by_arg;


efter om arg er "autoupdate" eller "core", skal den endten angive data i

        private string autoupdate;
        private bool autoupdate_set_by_arg;

eller

        private string core;
        private bool core_set_by_arg;


er det der man skal bruge pointers?

eller er der en lettere måde? og hvordan?

den skal kunne ændre sine pointers igen, til det andet sæt, da den skal angive alle data, bare ikke på samme tid
Avatar billede bitmatic Nybegynder
23. oktober 2009 - 11:07 #1
Du skal som udgangspunkt (næsten) aldrig bruge pointers i C#.

Jeg har en fornemmelse at det du leder efter det er noget med noget opslag i en dictionary.... Men jeg kan faktisk ikke rigtig forstå hvad det præcis er du vil.

Kan du prøve at beskrive i lidt bredere termer hvad det er du vil opnå ?
Avatar billede Droa Seniormester
23. oktober 2009 - 11:37 #2
Jeg har en funktion setVar(string arg, string value, source s), som skal sætte variabler, efter hvad den får besked på... f.eks vis der står arg = "autoupdate", value = "off", skal den sætte this.autoupdate = "off";
men vis der står arg = "core", value= "live", skal den sætte
this.core = "live";

ideen er der skal komme mange variabler på.. jeg kunne godt bruge en swtich, og gøre det så simpelt.. men problemet er jeg os har en 3. variabel, som det hele drejer sig om.

efter om.


enum source
{
Arg,
Program
}


jeg kan lave et eksempel på en situation af min metode

Indput
[Div]
setVar("autoupdate","off",source.Arg);
[/Div]

classe variabler

        private string autoupdate;
        private bool autoupdate_set_by_arg;
        private string core;
        private bool core_set_by_arg;

Funktion
[Div]
arg = "autoupdate";
value = "off";
s = source.Arg;

if(s == source.Arg OG this.autoupdate_set_by_arg ==  true)
{
// (FEJL!) ER BLEVET SAT EN GANG AF ARGUMENT
}
else
{
if(s == souce.Arg) // VIS s er argument
{
this.autoupdate_set_by_arg = true; //sæt set by arg til sand på globale variabler
}
this.autoupdate = value; // sætter værdien
}
}
[/div]


men kan man gøre, så alt den kode ikke skal skrives hver gang? fordi denne kode skal være den samme (udover der skal stå this.core og this.core_set_by_arg)

ellers skal jeg sætte alt den kode ind, i hver swtich-case situation i min setVar funktion-
Avatar billede bitmatic Nybegynder
23. oktober 2009 - 12:04 #3
Du kan bruge reflection til at sætte navngivne properties. Jeg har lavet et lille eksempel. Det kan du måske arbejde videre med.



namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            reflector r = new reflector();
            r.setVar("autoupdate", "off");
            r.setVar("core", "abcdefg");
        }

        private class reflector
        {
            public string autoupdate { get; set; }
            public string core { get; set; }

            public void setVar(string arg, string value)
            {
                Type t = this.GetType();
                System.Reflection.PropertyInfo pi = t.GetProperty(arg);
                pi.SetValue(this, value, null);
            }
        }
    }
}
Avatar billede arne_v Ekspert
24. oktober 2009 - 02:18 #4
Reflection kan gøre det.

Men umiddelbart lyder Dictionary stadig tiltrækkende.

Hvis du har mulighed for at modificere klassen kunne du backe properties'ene med et Dictionary fremfor fields !
Avatar billede Droa Seniormester
24. oktober 2009 - 16:34 #5
jeg takker mange gange, jeg har kigget på det i nogen dage, og tror det virker som jeg vil have det til nu, med hjælp fra reflection :)
Avatar billede Droa Seniormester
07. august 2010 - 01:26 #6
lukker gamle tråde der ikker er blevet svaret...
Avatar billede arne_v Ekspert
07. august 2010 - 01:41 #7
Burde bitmatic ikke have haft de point??
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