Какой правильный метод или ключевое слово следует добавить в определяемый пользователем метод, который переименовывает переменную в C #? - PullRequest
0 голосов
/ 18 мая 2018

это часть моего кода:

private void button1_Click(object sender, EventArgs e)
{
    int Chocolate = int.Parse(QtyChocolate.Text);
    TableUpdate("Chocolate", QtyChocolate.Text);
    int Vanilla = int.Parse(QtyVanilla.Text);
    TableUpate("Vanilla", QtyVanilla.Text);
    int Strawberry = int.Parse(QtyStrawberry.Text);
    TableUpate("Strawberry", QtyStrawberry.Text);
    int Melon = int.Parse(QtyMelon.Text);
    TableUpate("Melon", QtyMelon.Text);
    int Mint = int.Parse(QtyMint.Text);
    TableUpate("Mint", QtyMint.Text);
    int Marijuana = int.Parse(QtyMarijuana.Text);
    TableUpate("Marijuana", QtyMarijuana.Text);

    Machinefunction1(a bunch of parameters here including some of the int ingredients);
    Machinefunction55(a different bunch of parameters here including some of the int ingredients);
    //...and hundreds more ingredients... These integer values parsed from corresponding
    //textboxes will be used as parameters in various functions of the machine.    
}

Я пытаюсь создать метод для упрощения кода, и это то, что я пытался, но не получилось:

private void MyFunc(Ingredient, string text) //What method or keyword should precede Ingredient?
{
    int Ingredient = int.Parse(text);
    TableUpdate("Ingredient", text);
}
private void button1_Click(object sender, EventArgs e)
{
    MyFunc(Chocolate, QtyChocolate.Text); //This will recall my method to produce the named integers
    MyFunc(Vanilla, QtyVanilla.Text);
    //...and so on...

    Machinefunction1(a bunch of parameters here including some of the int ingredients);
    Machinefunction55(a different bunch of parameters here including some of the int ingredients);
}

Пожалуйстапомогите, спасибоПриносим извинения за доставленные неудобства.

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Я бы посоветовал вам посмотреть что-то вроде этого:

private void button1_Click(object sender, EventArgs e)
{
    var ingredients = new Dictionary<string, int>()
    {
        { "Chocolate", int.Parse(QtyChocolate.Text) },
        { "Vanilla", int.Parse(QtyVanilla.Text) },
        { "Strawberry", int.Parse(QtyStrawberry.Text) },
        { "Melon", int.Parse(QtyMelon.Text) },
        { "Mint", int.Parse(QtyMint.Text) },
        { "Marijuana", int.Parse(QtyMarijuana.Text) },
    }

    foreach (var ingredient in ingredients)
    {
        TableUpdate(ingredient.Key, ingredient.Value.ToString());
    }
}

Использование отдельных переменных для каждого ингредиента и использование out параметров, в то время как допустимый C # часто просто затрудняет чтение кода.

0 голосов
/ 18 мая 2018

Хотите ли вы что-то вроде out (что позволяет функции создавать экземпляр переменной в вызывающем методе)?:

private void MyFunc(string ingredientName, string text, out int ingredientQty)
{    
     ingredientQty = int.Parse(text);
     TableUpdate(ingredientName, text);
}

int Chocolate;
MyFunc(nameof(Chocolate), txtChocolateQty.Text, out Chocolate);

nameof заменит это наСтрока "Chocolate" во время компиляции путем просмотра имени переменной.

В качестве альтернативы, в C # 7 вы можете объявить int inline:

MyFunc("Chocolate", txtChocolateQty.Text, out int Chocolate);

Edit (с TryParse):

private bool MyFunc(string ingredientName, string text, out int ingredientQty)
{    
     if (!int.TryParse(text, out ingredientQty))
     {
         return false;
     }
     TableUpdate(ingredientName, text);
     return true;
}

использование:

if (MyFunc("Chocolate", txtChocolateQty.Text, out int Chocolate))
{
    // it was successful! yay!
}
...