Шаблон 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);
}
}