Just nu i M3-nätverket
Gå till innehåll

inparametern ändras inte


caveman

Rekommendera Poster

Hej

 

jag har tagit en rekursive funktion ifrån MSDN och modifierat den lite.

se nedan.

 

public static void RecursiveWalk(XPathNavigator nav, int finalProjectId)

{

switch (nav.NodeType){

case XPathNodeType.Element:

if(nav.LocalName == "ParentName")

{

 

//Här anropar jag ett API funktion som retunerar en int, jag sätter här om

// finalProjectId till inten som retuneras.

}

 

 

 

}

 

if ( nav.MoveToFirstChild() )

{

do{

RecursiveWalk(nav, finalProjectId);

} while ( nav.MoveToNext() );

 

nav.MoveToParent();

}

}

 

När sedan funktionen loopat och det inte finns nån mera child så sätts finalProjectId om till värdet som den hade om inparameter.

 

Mina frågor är ?

 

Kan man ändra en inparameter mitt i en metod ?

Varför sätts den om ?

 

 

//Henrik

 

Länk till kommentar
Dela på andra webbplatser

jerker olofsson
Kan man ändra en inparameter mitt i en metod ?

Ja.. Det är inga problem.

 

Varför sätts den om ?

Förstår inte exakt vad du menar.. Men en gissning:

Eftersom du skickar den "by value", så är det "en kopia" av det du skickar in till funktionen. Värdet kommer att ändras i funktionen. Men variabeln i det andra scopet, där du anropar metoden ändras aldrig. Se det som två olika variabler. Om du vill ändra den andra variablen så skicka den "by reference".

 

public void foo( ref int v )

{

v = 10;

}

 

public void bar( int v )

{

v = 20;

}

 

public void test()

{

int v = 0;

foo( ref v );

bar( v );

// v har värdet 10. inte 20.

}

 

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...