Коллекция экземпляров классов? - PullRequest
0 голосов
/ 13 января 2020

Совершенно новый здесь .. и ищу решение.

Итак, я разрабатываю форму, которая позволяет пользователю вводить 3 части информации (3 строки)

Мы ' Я назову их «Толстый, Материал, Пакет»

, следуя инструкциям в Интернете, я создал класс под названием slab, который имеет следующую структуру:

public class Slab
{
    public int slab { get; set; }
    public string thickness { get; set; }
    public string material { get; set; }
    public string batch { get; set; }

    public Slab(int Slab, string Thick, string Mat, string Batch)
    {
        Slab = slab;
        Thick = thickness;
        Mat = material;
        Batch = batch;
    }
}

Я запутался, потому что после онлайн руководства, которые я всегда давал названию для нового класса:

Плита S = новая Плита <--- Я знаю, что это плита S, потому что я назвал ее Плита S. </p>

Что я Я пытаюсь сделать так, чтобы пользователь мог создать X экземпляров этого класса, например, 7 раз, чтобы они добавляли 7 блоков, чтобы данные в этих 7 экземплярах могли передаваться по всей программе. Итак, когда кнопка нажата, она добавляет плиту.

Я не совсем понимаю, как я собираюсь выполнить sh, хотя моей первоначальной мыслью было иметь счетчик плит, поэтому, когда кнопка щелкнул, он читает счетчик плиты, счетчик плиты в настоящее время равен 1, так что это первая создаваемая плита, но как присвоить ей имя для передачи? Я хотел бы иметь возможность обратиться к этому снова где-то, как? Какой лучший подход для этого? А как насчет других 6 добавляемых слэбов?

Это может быть неправильный подход, как я выяснил с последним подходом: 30 строк c строк и 30 текстовых полей. Любой совет действительно ценится.

Ответы [ 2 ]

3 голосов
/ 13 января 2020

Прежде всего вам необходимо обновить свой класс, чтобы использовать руководство по кодированию и правильное назначение

  • Руководство по кодированию: Имя свойства должно начинаться с верхнего регистра, оно должно следовать за PascalCasing .
  • Присвоение значения свойству: Присвоить значение, переданное в качестве параметра свойству. Прямо сейчас вы присваиваете значение свойства параметрам конструктора.

    public class Slab
    {
         //I changed property name to distinguish between class name and property name
         public int SlabCount { get; set; } 
         public string Thickness { get; set; }
         public string Material { get; set; }
         public string Batch { get; set; }
    
         public Slab(int slab, string thick, string mat, string batch)
         {
             SlabCount = slab;
             Thickness = thick;
             Material = mat;
             Batch = batch;
         }
    }
    

Теперь вы можете использовать Список для хранения коллекций Slab экземпляров,

List<Slab> slabs = new List<Slab>();
slabs.Add(new Slab(1, "12", "Concrete", "1"));
slabs.Add(new Slab(2, "120", "Plaster of Paris", "2"));
...      //So on.

как вытащить всю информацию из слябов 1 и 3 в списке?

Вы можете использовать индекс, чтобы получить информацию о заданном c слябе, как

slabMaterial = slabs[0].Material; //Output: Concrete

Индекс списка начинается с 0. slabs[0] даст вам экземпляр класса Slab, а .Material вернет значение, присвоенное Material свойству

2 голосов
/ 13 января 2020

в качестве расширения принятого ответа;

Использование счетчика в качестве идентификатора может быть полезным, но в вашем случае это не обязательно. Я бы предложил удалить его.

    public class Slab
    {
        public string Thickness { get; set; }
        public string Material { get; set; }
        public string Batch { get; set; }

        public Slab(string thick, string mat, string batch)
        {
            Thickness = thick;
            Material = mat;
            Batch = batch;
        }
    }

Подход List, предложенный Прасадом Телкикаром, - это путь к go, но понять, как использовать предметы, которые вы добавляете, немного глубже в Кроличья нора. Прочитайте следующий код:

    // Create a field with slabs as an instance variable on your editting form
    private List<Slab> allSlabs = new List<Slab>();

    public void Click_ButtonSaveNewSlab()
    {
        // check if we should save it
        if (txtMaterial.Text.Length > 0)
        {
            // Our new slab
            Slab s = new Slab(txtThickness.Text, txtMaterial.Text, txtBatch.Text);

            // Add the new slab to the list
            allSlabs.Add(s);
        }
    }

    public void Click_ButtonSendHtml()
    {
        // Some HTML string to append to
        string html = "<h1>Hello Slabs</h1>";

        // Whenever we want to do something for every slab in the list use foreach
        foreach (Slab s in allSlabs)
        {
            // Add every Slab's data to the HTML
            html += $"<h6> Material: {s.Material} </h6>";
        }

        // Whenever we want to do something with every slab in the list and use it's position counter aswell use for
        for (int i = 0; i < allSlabs.Count; i++)
        {
            // Grab a Slab from the list specified by the counter i
            Slab s = allSlabs[i];

            // Add every Slab's data to the HTML
            html += $"<h6> ID: {i}  Material: {s.Material} </h6>";
        }

        // Also look into LINQ for drilling down into lists and selecting subsets
        var allBedrockSlabs = allSlabs.Where(slab => slab.Material == "Bedrock");

        foreach(Slab bedrockSlab in allBedrockSlabs)
        {
            //etc ... 
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...