Как использовать значения, указанные в операторе if-else? - PullRequest
0 голосов
/ 03 февраля 2019

Я недавно начал изучать C # и хотел создать преобразователь длины с разными единицами измерения.Тем не менее, похоже, что я не могу использовать значения, указанные внутри оператора if-else.Кто-нибудь может мне помочь?

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace converter
{
    public partial class MainForm : Form
    {
    public MainForm()
    {
        InitializeComponent();
    }
    void ClearBClick(object sender, EventArgs e)
    {
        convIn.Clear();
        convOut.Clear();
        cmbConv.Refresh();
    }
    void ExitBClick(object sender, EventArgs e)
    {
        this.Close();
    }
    void ConvBClick(object sender, EventArgs e)
    { double exchangeRate;

        if(cmbConv.SelectedItem.ToString() == "Miles to Kilometers")
        {
            exchangeRate = 1.60934;
        }
        else if(cmbConv.SelectedItem.ToString() == "Kilometers to Miles")
        {
            exchangeRate = 0.621371;
        }
        else if(cmbConv.SelectedItem.ToString() == "Inches to Centimeters")
        {
            exchangeRate = 0.393701;
        }
        else if(cmbConv.SelectedItem.ToString() == "Centimeters to Inches")
        {
            exchangeRate = 2.54;
        }

        double conv = Convert.ToDouble(convIn.Text);
        var conversion = conv * exchangeRate;

        var result = Convert.ToString(conversion);

        convOut.Text = result;
        }

    }
}

До того, как я использовал это, я использовал другую структуру, которая также не работала, в которой я разделил оператор if-else различными методами.

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace converter
{
    public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
    }
    void ClearBClick(object sender, EventArgs e)
    {
        convIn.Clear();
        convOut.Clear();
        cmbConv.Refresh();
    }
    void ExitBClick(object sender, EventArgs e)
    {
        this.Close();
    }
    void ConvBClick(object sender, EventArgs e)
    {           double conv = Convert.ToDouble(convIn.Text);
        var conversion = conv * exchangeRate;

        var result = Convert.ToString(conversion);

        convOut.Text = result;
    }
    void CmbConvSelectedIndexChanged(object sender, EventArgs e)
    {
         double exchangeRate;

        if(cmbConv.SelectedItem.ToString() == "Miles to Kilometers")
        {
            exchangeRate = 1.60934;
        }
        else if(cmbConv.SelectedItem.ToString() == "Kilometers to Miles")
        {
            exchangeRate = 0.621371;
        }
        else if(cmbConv.SelectedItem.ToString() == "Inches to Centimeters")
        {
            exchangeRate = 0.393701;
        }
        else if(cmbConv.SelectedItem.ToString() == "Centimeters to Inches")
        {
            exchangeRate = 2.54;
        }

     }
 }

1 Ответ

0 голосов
/ 03 февраля 2019

Вы пытаетесь использовать переменную с именем exchangeRate в своем методе ConvBClick, но эта переменная не существует в этом методе.Вы создали переменную с таким же именем в своем методе CmbConvSelectedIndexChanged, но затем никогда ничего с ней не делали.

Однако, больше к общей структуре кода, ваш метод CmbConvSelectedIndexChanged на самом деле ничего не делает.Он выполняется каждый раз, когда выбранный индекс изменяется на этом элементе управления, но больше ничего не влияет.Вместо того, чтобы вообще реагировать на это событие SelectedIndexChanged, просто напишите метод, который возвращает желаемое значение в зависимости от текущего выбранного индекса:

double GetExchangeRate()
{
    double exchangeRate = 0.0;

    if(cmbConv.SelectedItem.ToString() == "Miles to Kilometers")
    {
        exchangeRate = 1.60934;
    }
    // etc., the rest of your conditions

    return exchangeRate;
}

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

double conv = Convert.ToDouble(convIn.Text);
var exchangeRate = GetExchangeRate();
var conversion = conv * exchangeRate;

var result = Convert.ToString(conversion);

convOut.Text = result;
...