Just nu i M3-nätverket
Jump to content

inparametern ändras inte


caveman

Recommended Posts

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

 

Link to comment
Share on other sites

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.

}

 

 

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...