Как добавить элемент в свойство типа List <T>? - PullRequest
0 голосов
/ 19 апреля 2020

Я использую классы Form1.cs, MockProduct.cs и Product.cs.
Чтобы добавить новую запись, я использую метод:

public partial class Form1: Form
    {
        public Form1 ()
        {
            InitializeComponent ();
        }
 
    
        public void AddItem ()
        {
            Product product = new Product ()
            {
                ID = 4,
                Name = "Name_4",
                Description = "Description_4"
            };
 
            MockProduct.ProductList.Add (product);
 
            var v = MockProduct.ProductList;
        }
 
    }


Я проверяю запись используя выражение MockProduct.ProductList.Count.
Результат: MockProduct.ProductList.Count = 3.
Другими словами, запись не добавляется.

Вопрос.
1. Как добавить элемент в свойство типа List?
2. Есть ли в моем коде ошибка?


Picture-1
enter image description here

MockProduct.cs

static class MockProduct
    {
        static List<Product> productList;

        public static List<Product> ProductList
        {
            get
            {
                return productList = new List<Product>
                {
                    new Product {ID = 1, Name = "Name_1", Description = "Description_1"},
                    new Product {ID = 2, Name = "Name_2", Description = "Description_2"},
                    new Product {ID = 3, Name = "Name_3", Description = "Description_3"},
                };
            }
            set
            {
                productList = value;
            }
        }
    }

Product.cs

public class Product
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }

    }

Ответы [ 3 ]

2 голосов
/ 19 апреля 2020

Каждый раз, когда вы вызываете метод получения свойства ProductList, вы создаете и инициализируете новый экземпляр поля productList (используя оператор new), поэтому вы всегда получаете ProductList.Count, равный 3. Попробуйте переместить эту логику c за пределы свойства и инициализировать productList только один раз при объявлении ее

static List<Product> productList = new List<Product>
{
    new Product {ID = 1, Name = "Name_1", Description = "Description_1"},
    new Product {ID = 2, Name = "Name_2", Description = "Description_2"},
    new Product {ID = 3, Name = "Name_3", Description = "Description_3"},
};

public static List<Product> ProductList
{
    get
    {
        return productList;
    }
    set
    {
        productList = value;
    }
}
1 голос
/ 19 апреля 2020
  1. Как добавить элемент в свойство типа List?

Вы используете правильный метод:

ProductList.Add (product);
Есть ли в моем коде ошибка?

Да, метод получения для ProductList всегда возвращает новый список. Удалить этот код из класса MockProduct:

        public static List<Product> ProductList
        {
            get
            {
                return productList = new List<Product>
                {
                    new Product {ID = 1, Name = "Name_1", Description = "Description_1"},
                    new Product {ID = 2, Name = "Name_2", Description = "Description_2"},
                    new Product {ID = 3, Name = "Name_3", Description = "Description_3"},
                };
            }
            set
            {
                productList = value;
            }
        }
1 голос
/ 19 апреля 2020

Если вы хотите получить начальное значение для своего списка, вы можете создать его только при первом обращении к нему:

get
{
    if (productList == null)
    {
        productList = new List<Product>
        {
            new Product {ID = 1, Name = "Name_1", Description = "Description_1"},
            new Product {ID = 2, Name = "Name_2", Description = "Description_2"},
            new Product {ID = 3, Name = "Name_3", Description = "Description_3"},
        };
    }
    return productList;
}
set
{
    productList = value;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...