Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2012, 20:52   #1
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию как удалить в списке объект по ссылке

У меня примерно такая ситуация. Вот у меня в temp есть ссылка на третий элемент, я его удаляю. Но удаляется, зараза, первый. Сфига ли он удаляется, если в temp по идее ссылка на последний объект?

Код:
List<string> list = new List<string>() {"a","b","c" };
string temp = list[2];
list[0] = temp;
list.Remove(temp);

foreach(var s in list)
Console.WriteLine(s);
the_deer_one вне форума Ответить с цитированием
Старый 23.04.2012, 21:47   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

удаляется в данном случае по значению.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.04.2012, 19:08   #3
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Короче сделал элементу коллекции конструктор копии, и вставлял дублированное значение, так удаляется только то что нужно.

А ваще в шарпе вынос мозга.
Цитата:
String s11 = "s";
String s22 = "s";
Console.WriteLine(Object.ReferenceE quals(s11, s22));

String s1 = new String("s".ToCharArray());
String s2 = new String("s".ToCharArray());

Console.WriteLine(Object.ReferenceE quals(s1, s2));
Console.ReadKey();
В первом случае получается две ссылки на один объект, а во втором случае два объекта.
the_deer_one вне форума Ответить с цитированием
Старый 24.04.2012, 22:58   #4
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

the_deer_one, если я не ошибаюсь и если не врет MSDN, то вот поэтому и удаляет == > url:
Цитата:
List<T>.Remove Method
Removes the first occurrence of a specific object from the List<T>.
Т.е. удаляет первое вхождение указанного объекта из списка. А на первом месте в списке как раз и есть объект указанный в temp.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 25.04.2012, 06:34   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Цитата:
Сообщение от the_deer_one Посмотреть сообщение
В первом случае получается две ссылки на один объект, а во втором случае два объекта.
Для экономии памяти CLR интернирует строковые литералы.
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как удалить объект во время выполнения программы на AS 2.0 ALKOrobot JavaScript, Ajax 0 11.07.2011 01:09
как удалить объект по указателю на его базовый класс? AndreyBS Общие вопросы C/C++ 5 17.04.2011 11:29
Что в ссылке на объект, после объявления? AnTe Общие вопросы Delphi 7 26.03.2010 04:30
как сделать или отдолжить такой же движок форума как по ссылке? Дим@ Свободное общение 5 13.10.2009 20:55
как удалить анти вирус( касперский 2006)если она не работает и ее не возможно удалить Alar Общие вопросы Delphi 0 29.10.2006 21:36