Wpis z mikrobloga

Cześć Mirki. Czytałem sobie ostatnio o strukturach Span oraz ReadOnlySpan i za nic nie mogę oragnąć dwóch rzeczy. Powiedzmy, że obie struktury są swoistym "okienkiem" na obszar w pamięci (czy to na stosie czy stercie).

1. Więc co w tym znaczy, że Span umożliwia dostęp do zapisu i odczytu a ReadOnlySpan tylko do odczytu. W sensie, że w przypadku Span mogę zrobić tak:

var text = "wykop";
Span span = text.ToCharArray();
span [0] = 'b';

a w przypadku ReadOnlySpan wywaliłoby mi błąd?

2. I drugie pytanie. Jeśli posiadam taki kod:

var text = "wykop";
Span span = text.ToCharArray();
span [0] = 'b';
Console.WriteLine(text);

to dlaczego zostaje wypisane "wykop" zamiast "bykop"? W momencie jak wykonany został span [0]='b' utworzony został nowy obiekt typu string na stercie?

#csharp
  • 5
@alochomora12: przetwarzając w ten sposób tekst pchasz się w problemy z Unikodem :P Aczkolwiek wykop i tak nie obsługuje kodowania surrogatów, więc jeżeli coś parsujesz, to w sumie nie będzie problemów.
@nietrolluje: no i teraz kminię. Jak zrobiłem

var chars = new char[] {'w', 'y', 'k', 'o', 'p'};
Span span = chars;
span[0] = 'b';
Console.WriteLine(chars[0]);
Console.WriteLine(span[0]);

to wypisało b i b . Wielkie dzięki ( ͡° ͜ʖ ͡°)