Member 13604442 Ответов: 2

C# - как добавить список в список


Я создал класс объектов: текст, число и список картинок. Я не знаю, хорошо ли у меня получается, но я хотел сохранить его в списке для лучшего использования. К сожалению, я не знаю, как добавить список в список и как показать его позже. Петля для чего? Может ли кто-нибудь помочь мне с этим?

Что я уже пробовал:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

<pre>namespace DynamicObjectList
{
    class Products
    {
        public int id { get; set; }
        public string title { get; set; }
        public string amount { get; set; }
        public string price { get; set; }
        public List<Image> images { get; set; }
	}
}
...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DynamicObjectList
{
    public partial class Form1 : Form
    {
        public int nr = 0;

        List<Products> prodList = new List<Products>(3);

        List<string> imgList1 = new List<string>();

        public Form1()
        {
            InitializeComponent();
        }

        private void button_Add_Click(object sender, EventArgs e)
        {
            nr++;
            Products prod = new Products();
            prod.id = nr;
            prod.title = "Product " + nr.ToString();
            prod.amount = (Convert.ToInt16("2") * nr).ToString();
            prod.price = (Convert.ToDouble("10,00") * nr).ToString();
            prod.images = imgList1;
            prodList.Add(prod);

        }

        private void button_Show_Click(object sender, EventArgs e)
        {


            for (int i = 0; i < prodList.Count; i++)
            {
                Products p = prodList[i];

                textBox_Wyswietla.Text += String.Format("ID: {0}, Title: {1}, Amount: {2}, Price: {3}\r\n", p.id, p.title, p.amount, p.price);

                List<string> img = new List<string>();
                img = p.images;
                for (int j = 0; j < img.Count; j++)
                {
                    textBox_Wyswietla.Text += img[j] + "\r\n";
                }
            }

        }
...

F-ES Sitecore

Вы добавляете список в список с помощью AddRange

mainList.AddRange(listToAdd);

2 Ответов

Рейтинг:
2

OriginalGriff

Класс List строго типизирован, что означает, что он принимает только те объекты, которые относятся к тому же классу, что и список, который был первоначально определен для хранения (или которые являются производными от этого класса).
Например:

class A {}
class B : A {}
class C : B {}
List<A> dataA = new List<A>();
List<B> dataB = new List<B>();
List<C> dataC = new List<C>();
dataA может содержать экземпляры классов A , B и C; dataB может содержать экземпляры B и C, но не A; и dataC может содержать только экземпляры C, но не A или B.

Таким образом, вы не можете создать List<Products> и ожидайте, что он будет содержать что-то еще, кроме Products экземпляры - и вы, конечно же, не можете добавить List<Products> к нему же они даже не имеют ни малейшего отношения!

Если то, что вы пытаетесь сделать, это добавить другой список изображений (который на самом деле является списком строк в вашем примере) к каждому продукту (и, пожалуйста, сделайте нам всем одолжение и избавьтесь от "s" там - это подразумевает, что это класс коллекции, а не один объект), то вы уже на полпути - все, что вам нужно сделать, это создать новый экземпляр списка изображений при создании продукта:
Products prod = new Products();
prod.id = nr;
prod.title = "Product " + nr.ToString();
prod.amount = (Convert.ToInt16("2") * nr).ToString();
prod.price = (Convert.ToDouble("10,00") * nr).ToString();
prod.images = new List<string>(imgList1);
imgList1.Clear();
(Очистить, чтобы удалить элементы в следующий раз)


Рейтинг:
2

Rajesh Anuhya

Привет,

проверить это C# 4 - Кортежи[^]

Это вам поможет.

--РА


Afzaal Ahmad Zeeshan

Рассматривайте размещение ссылок на ссылки как комментарии, если только они не предназначены для решения проблемы, и они тоже решают эту проблему.