Шаблон System.Collections.Generic.List со своим классом в качестве параметра - C#
Формулировка задачи:
При добавлении методом .Add контейнера List, если в качестве класса у шаблона использовать стандартный класс string - добавляется строка с содержимым. При добавлении же элементов List<string_2> добавляется только ссылка на исходный элемент. Все бы было понятно, если бы string не был контейнером. Но ведь он тоже контейнер. Значит, List неявным образом вызывает какой-то метод копирования содержимого string-а и по причине отсутствия такого метода у моего класса string_2 ничего подобного не делает.
Решить проблему удается куском кода, закомментированным. Но это очень не удобно. В C++ у меня был класс, который по смыслу был тем же, что и List. Но там все строилось на возможности переопределения оператора =, в результате чего вызов получался так же изящным – просто вызовом метода Add.
Есть ли в C# какие-то методы, которые неявно вызываются List-ом или нет?
Листинг программы
- class test_list
- {
- class string_2
- {
- string str1, str2;
- public string_2()
- {
- str1 = "";
- str2 = "";
- }
- public void set_val(string src1, string src2)
- {
- str1 = src1;
- str2 = src2;
- }
- public void CopyTo(string_2 dst)
- {
- dst.str1 = str1;
- dst.str2 = str2;
- }
- }
- List<string> str_list;
- string str_list_item;
- List<string_2> str_2_list;
- string_2 str_2_list_item;
- public test_list()
- {
- str_list = new List<string>();
- str_2_list = new List<string_2>();
- str_list_item = "";
- str_2_list_item = new string_2();
- }
- public void fill_data()
- {
- string sx = "";
- string sy = "";
- for (int i = 0; i < 10; i++)
- {
- sx = "x = " + i;
- sy = "y = " + i*i;
- str_list_item = sx;
- str_2_list_item.set_val(sx, sy);
- str_list.Add(str_list_item);
- str_2_list.Add(str_2_list_item);
- /*
- str_2_list.Add(null);
- str_2_list[str_2_list.Count - 1] = new string_2();
- str_2_list_item.CopyTo(str_2_list[str_2_list.Count - 1]);
- */
- }
- }
Решение задачи: «Шаблон System.Collections.Generic.List со своим классом в качестве параметра»
textual
Листинг программы
- public void fill_data()
- {
- string sx = "";
- string sy = "";
- for (int i = 0; i < 10; i++)
- {
- sx = "x = " + i;
- sy = "y = " + i*i;
- str_list_item = sx;
- string_2 str_2_list_item = new string_2();
- str_2_list_item.set_val(sx, sy);
- str_list.Add(str_list_item);
- str_2_list.Add(str_2_list_item);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д