C# struct într-o listă [duplicate] (Programare, C#, Struct)

bwoogie a intrebat.

Întrebare rapidă despre structurile… Am un struct, să presupunem că arată așa:

struct myStruct {
     public int x, y;
}

Și apoi fac o listă umplută cu acel struct

List<myStruct> myList = new List<myStruct>;

Și mai târziu fac o buclă prin listă și vreau să schimb valoarea lui x…

for(int i=0; i<myList.Count; i++) {

     ...//do stuff to x

     myList[i].x = newX;
}

Nu se poate modifica valoarea de retur a ‘List<myform.myStruct>.this[int]’ deoarece nu este o variabilă

Vă rog să mă lămuriți cu privire la confuzia pe care o am de ce nu mă lasă să modific valoarea lui x.

Comentarii

  • Acesta este motivul pentru care nu ar trebui să faceți niciodată structuri mutabile. –  > Por SLaks.
  • Întrebarea a fost deja pusă stackoverflow.com/questions/51526/… – user1023602
  • Dacă aveți nevoie să modificați valorile din listă, de ce să nu folosiți o structură class în schimb, cum ar fi Tuple<int,int>? –  > Por juharr.
2 răspunsuri
Gary McGill

Un struct este un tip de valoare și este transmis prin valoare. Când spuneți myList[i].x = newX atribuiți la x a unei copie din ial treilea element al myList, , care va fi aruncată după executarea instrucțiunii. Din fericire, compilatorul vă va împiedica să faceți această greșeală.

clcto

Structurile sunt tipuri de valori. Astfel, returnul indexorului este o copie temporară a valorii din listă, care nu poate fi modificată. Trebuie să înlocuiți structura din listă:

var val = myList[i];
val.x = newX;
myList[i] = val;

Comentarii

  • Aceasta este ceea ce am făcut în cele din urmă, dar eram curios să aflu de ce primeam această eroare. Mulțumesc. –  > Por bwoogie.

Tags:,