Шаблон 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); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д