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

inparametern ändras inte

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

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser
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.

}

 

 

Dela detta inlägg


Länk till inlägg
Dela på andra webbplatser

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Skapa ett nytt konto på vårt forum. Det är lätt!

Registrera ett nytt konto

Logga in

Redan medlem? Logga in här.

Logga in nu



×
×
  • Skapa nytt...