verander struct in methode

Hoe kan ik struct in externe methode veranderen?

public void ChangeStruct (MyStruct myStruct) {
   myStruct.field1 = 10;
   return;
}

Wanneer ik na die methode struct doorstroom naar de ChangeStruct-methode, zou ik willen dat mijnStruct wordt gewijzigd.

2
Maak alsjeblieft geen veranderlijke struct s aan.
toegevoegd de auteur svick, de bron
Is er een bijzondere reden dat u een struct gebruikt voor deze situatie?
toegevoegd de auteur Gabe, de bron

3 antwoord

U moet een verwijzing naar de struct doorgeven in plaats van een kopie met behulp van de ref zoekwoord :

public void ChangeStruct (ref MyStruct myStruct)
{
   myStruct.field1 = 10;
}

ChangeStruct(ref someStruct);

Uw huidige code maakt een volledige bit-voor-bit kopie van de struct voordat u de methode invoert en het is deze kopie die u wijzigt, het trefwoord ref dwingt de beller om een ​​verwijzing (beheerde aanwijzer) door te geven aan de structuur in plaats van aan de kopie.

8
toegevoegd
Ik was ervan overtuigd dat deze vraag al was gesteld, maar ik kan het duplicaat niet vinden. Hoe dan ook, het antwoord is simpel ...
toegevoegd de auteur Julien Roncaglia, de bron

U kunt het trefwoord ref gebruiken om wijzigingen in structs te observeren, maar in het grote schema bevindt u zich in een wereld van minder pijn als u gewoon een klasse gebruikt.

Voor een idee over wanneer u structs gebruikt of niet gebruikt, kunt u deze link raadplegen . Een snel fragment dat misschien nuttig is:

Definieer een structuur alleen als het type alle volgende kenmerken heeft:

     
      
  • Het vertegenwoordigt logisch een enkele waarde, vergelijkbaar met primitieve typen   (integer, double, enzovoort).
  •   
  • Het heeft een instantiegrootte kleiner dan 16   bytes.
  •   
  • Het is onveranderlijk.
  •   
  • Het hoeft niet vaak in een vak te worden geplaatst.
  •   
5
toegevoegd

Structuren zijn waardetypen, u moet het trefwoord ref gebruiken om kopiëren te voorkomen. Het gebruik van ref en out wordt niet aanbevolen, zie Wanneer is het sleutelwoord C# ooit een goed idee? .

2
toegevoegd