кажется, что строка является ссылкой, но копируется значениеКак передать строку в коллекцию по ссылке?
List<string> data = new List<string>();
string s = "a";
data.Add(s); // copy by value??
s = "b";
Console.WriteLine(data[0]); // "a"
Кроме того, представляется, что класс ссылка копируется по ссылке
class boxstring { public string val; }
List<boxstring> data = new List<boxstring>();
boxstring s = new boxstring { val = "a" };
data.Add(s); // copy by reference, ok
s.val = "b";
Console.WriteLine(data[0].val); // "b"
Есть более простой способ передать строку в коллекцию с помощью ссылки без упаковки в класс? Я хотел бы передать член объекта в коллекцию, и если объект был изменен, коллекция также должна быть изменена без написания дополнительного кода.
Строка ничем не отличается от любого другого класса. Важной линией является 's =" b ";'. Это переназначение. Обратите внимание, что любой класс будет показывать такое же поведение в списке. * Наблюдаются мутации * экземпляра *. * Переназначения * переменной * не являются. –
Возможный дубликат [C# справочной коллекции для хранения ссылочных типов] (http://stackoverflow.com/questions/4569062/c-sharp-reference-collection-for-storing-reference-types) – nawfal