Обучаюсь языку C#. В процессе его "ковыряния" возник вопрос: почему при передаче массива в метод его изменение отображается во внешнем контексте, а у строки нет, хотя и то и другое - ссылочные типы?
Asked
Active
Viewed 181 times
1
1 Answers
5
Поменять массив внутри метода не получится, посмотрите:
void Main()
{
var arr = new int[] { 1, 2, 3 };
Test1(arr);
arr.Dump();
}
private void Test1(int[] arr)
{
arr = null;
}
Выведет:
А вот в вашем примере вы меняете не массив, а его элементы - а внутри массива у вас значимый тип (int), он заменяется.
Аналогично и с другими ссылочными типами:
void Main()
{
var book = new Book { Id = 1, Title = "asdf"};
Test1(book);
book.Dump();
}
private void Test1(Book book)
{
book.Id = 2;
book = null;
}
public class Book
{
public int Id { get; set; }
public string Title { get; set; }
}
Со строками такой вариант не проходит, потому что строки в C# - неизменяемый тип.
A K
- 28,718




a = new int[100];и поглядеть результат – tym32167 Jan 27 '21 at 18:54a = "abc";вы просто на бумажке с адресом стираете старый адрес дома и пишете новый адрес нового дома, при этом сами дома никак не меняются – tym32167 Jan 27 '21 at 18:57a[0]=5;означаетпойди по адресу на бумажке а, зайди в первую квартиру и запиши туда 5- то есть эта операция меняет значение в массиве, потому вы видите это изменение. – tym32167 Jan 27 '21 at 18:59char, но только на чтениеchar c = text[3], а вот наоборот присвоить не получится, потому что строка - неизменяема. – aepot Jan 27 '21 at 19:55