Шаблон System.Collections.Generic.List со своим классом в качестве параметра - C#

Узнай цену своей работы

Формулировка задачи:

При добавлении методом .Add контейнера List, если в качестве класса у шаблона использовать стандартный класс string - добавляется строка с содержимым. При добавлении же элементов List<string_2> добавляется только ссылка на исходный элемент. Все бы было понятно, если бы string не был контейнером. Но ведь он тоже контейнер. Значит, List неявным образом вызывает какой-то метод копирования содержимого string-а и по причине отсутствия такого метода у моего класса string_2 ничего подобного не делает. Решить проблему удается куском кода, закомментированным. Но это очень не удобно. В C++ у меня был класс, который по смыслу был тем же, что и List. Но там все строилось на возможности переопределения оператора =, в результате чего вызов получался так же изящным – просто вызовом метода Add. Есть ли в C# какие-то методы, которые неявно вызываются List-ом или нет?
Листинг программы
  1. class test_list
  2. {
  3. class string_2
  4. {
  5. string str1, str2;
  6. public string_2()
  7. {
  8. str1 = "";
  9. str2 = "";
  10. }
  11. public void set_val(string src1, string src2)
  12. {
  13. str1 = src1;
  14. str2 = src2;
  15. }
  16. public void CopyTo(string_2 dst)
  17. {
  18. dst.str1 = str1;
  19. dst.str2 = str2;
  20. }
  21. }
  22. List<string> str_list;
  23. string str_list_item;
  24. List<string_2> str_2_list;
  25. string_2 str_2_list_item;
  26.  
  27. public test_list()
  28. {
  29. str_list = new List<string>();
  30. str_2_list = new List<string_2>();
  31. str_list_item = "";
  32. str_2_list_item = new string_2();
  33. }
  34. public void fill_data()
  35. {
  36. string sx = "";
  37. string sy = "";
  38. for (int i = 0; i < 10; i++)
  39. {
  40. sx = "x = " + i;
  41. sy = "y = " + i*i;
  42. str_list_item = sx;
  43. str_2_list_item.set_val(sx, sy);
  44. str_list.Add(str_list_item);
  45. str_2_list.Add(str_2_list_item);
  46. /*
  47. str_2_list.Add(null);
  48. str_2_list[str_2_list.Count - 1] = new string_2();
  49. str_2_list_item.CopyTo(str_2_list[str_2_list.Count - 1]);
  50. */
  51.  
  52. }
  53.  
  54. }

Решение задачи: «Шаблон System.Collections.Generic.List со своим классом в качестве параметра»

textual
Листинг программы
  1.         public void fill_data()
  2.         {
  3.             string sx = "";
  4.             string sy = "";
  5.             for (int i = 0; i < 10; i++)
  6.             {
  7.                 sx = "x = " + i;
  8.                 sy = "y = " + i*i;
  9.  
  10.                 str_list_item = sx;
  11.                 string_2 str_2_list_item = new string_2();
  12.                 str_2_list_item.set_val(sx, sy);
  13.  
  14.                 str_list.Add(str_list_item);
  15.                 str_2_list.Add(str_2_list_item);
  16.             }
  17.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы