2017-02-01 2 views
0

Для личного проекта я хочу создать простую систему инвентаризации на C#. Существует три входа: itemName (строка), itemQuantity (int), itemLevelAlert (int), а затем кнопка.Эффективный способ хранения пользовательских входных данных, содержащих строку и int, список или массив? C#

Когда нажата кнопка «Добавить», я хочу, чтобы входные данные были сгруппированы и сохранены где-то. Я недостаточно опыт на C#, чтобы знать лучший способ сделать это.

В JavaScript я бы, вероятно, использовать мульти-размерный массив:

var inventoryArray = [["Hammer", 25, 5], ["Nails", 100, 20]] 

и просто нажать на вход в этот массив. Я все еще участвую в C#, и он идет о массивах немного по-другому.

Могу ли я сделать что-то подобное со списком? Я, наверное, вскакиваю вглубь, рассматривая мою неопытность, но я чувствую, что так лучше училюсь.

+0

да, список - это то, что вам нужно. – Sergio

+3

Лучший вариант здесь: Создал класс с необходимыми свойствами, затем создайте Список объектов этого класса –

+1

@ un-lucky brilliant! Я по-прежнему не знаком с классами, но быстро прочитал, и я понял, о чем вы говорите. Ответ Джоэля - это то, к чему я направлялся. – Ari

ответ

2

В .Net языках, как C#, обычно требуется, чтобы построить тип (класс) для такого рода вещи:

public class Item 
{ 
    public string Name {get;set;} 
    public int Quantity {get;set;} 
    public int AlertLevel {get;set;} 
} 

А затем создать общий объект списка, который может содержать эти элементы (и только эти элементы)

var inventory = new List<Item>(); 

и теперь, когда вы нажимаете добавить код для кнопки выглядит примерно так (в предположении Winforms и с большим количеством готовых имен переменных веб-сайты будут выглядеть иначе)!.:

//assuming Winforms. Code for a web site will look a bit different: 
private void button1_Click(object sender, EventArgs e) 
{ 
    int quantity, alertlevel; 
    if (!int.TryParse(txtQuantity.Text, out quantity)) 
    { 
     MessageBox.Show("Enter a valid number for the quantity."); 
     return; 
    } 
    if (!int.TryParse(txtQuantity.Text, out alertlevel)) 
    { 
     MessageBox.Show("Enter a valid number for the alert level."); 
     return; 
    } 

    inventory.Add(new Item() {Name = txtName.Text, Quantity = quantity, AlertLevel = alertlevel}); 
} 
+0

Да! Я все еще привык к использованию классов. Это действительно помогло понять, как они вступают в игру. Я в значительной степени сделал то, что вы сделали, создал класс с тремя входами, а затем нажатием кнопки я сделал все, кроме проверки, спасибо за то, что они тоже пригодится! – Ari

+0

Знайте ... в отличие от javascript, .Net и C# очень специфичны в отношении типов данных. _ Вы не хотите пропустить проверку! _ Int не являются строками, строки не являются int. Вы не конвертируете между ними так же свободно, как в javascript. Конечно, вы можете сделать это другими способами ... не включать кнопку, если в текстовых окнах нет хороших данных. Но не ожидайте, что это будет изменено на лету позже. Вы ** хотите, чтобы эти данные хранились в классе с использованием хороших типов. –

+0

Это то, к чему у меня еще нет привычки, и что меня тоже разочаровывает, C# очень специфично относится к его типам данных. Я больше изучаю, как все взаимодействует (типы данных, методы, классы), так как это сильно отличается от javascript. – Ari

1

Вы можете начать с определения вашей модели:

internal class Inventory 
    { 
     public string ItemName { get; set; } 

     public int ItemQuantity { get; set; } 

     public int ItemLevelAlert { get; set; } 
    } 

Затем вы должны объявить список инвентаризации, где вы будете хранить вновь созданный инвентарь:

var inventoryList = new List<Inventory>(); 

После этого, вам нужно для добавления вашего инвентаря в вышеуказанный инвентарьЛист в событии нажатия кнопки:

button.Click += (s, e) => 
      { 
       inventoryList.Add(new Inventory() 
       { 
        // get value from your form 
        ItemName = "Item1", 
        ItemLevelAlert = 1, 
        ItemQuantity = 5 
       }); 

 Смежные вопросы

  • Нет связанных вопросов^_^