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

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


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

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

12   голосов , оценка 4.25 из 5
Похожие ответы