У меня есть задание, требующее много конверсий между различными единицами измерения. У меня есть вся работа, кроме математической части. Мой вопрос в том, и если у кого-то есть лучшее решение для всех ушей, было бы лучше сделать эти вычисления с помощью оператора switch или if? Вот небольшая информация о моей программе. У меня есть текстовый файл, который содержит 9 различных единиц измерения, а также их длины в плане ног, разделенных запятой, который выглядит следующим образом:Что лучше делать калькуляции? Корпус выключателя, если-statment?
дюйма, .083333
Fathom, 6
стопу, 1
фарлонг, 660
км, 3281,5
метр, 3,2815
мили, 5280
стержень, 16,5
двор, 3
Итак, у меня есть SUC без всякой информации в массив строк. Оттуда я дважды разбил массив строк. В первый раз, когда я разделил массив строк, я создал новый массив строк, который будет содержать только имена для каждой единицы измерения. Во второй раз, когда я разделил строковый массив, я сделал это, чтобы создать двойной массив для хранения всех числовых значений для каждой единицы измерения. Теперь мне нужно сделать математическую часть. Моя программа будет отображать девять разных единиц измерения, запросить устройство для конвертирования, запросить устройство для преобразования, запросить количество (или общее измерение) для преобразования, а затем отобразить преобразованное количество. До сих пор это то, что у меня есть:
private void SandC_Load(object sender, EventArgs e)
{
splitContainer1.Panel1Collapsed = false;
splitContainer1.Panel2Collapsed = true;
string[] lengths = File.ReadAllLines("Units.txt");
int count=0;
string[] unitName=new string[count];
while (!(count==10))
{
count++;
lbLengths.Items.Add(count+"."+" "+lengths[count-1].Split(new Char[]{','})[0]);
}
}
private void btnConvert_Click(object sender, EventArgs e)
{
string orginalunits = tborginalUnits.Text;
int orginalunits1;
string desiredunits = tbDesiredunits.Text;
int desiredunits1;
string lenghttoConvert = tbConvert.Text;
double lenghttoConvert1;
string[] lengths = File.ReadAllLines("Units.txt");
int count = lengths.Length;
double[] units = new double[lengths.Length];
for (int i = 0; i < lengths.Length;i++)
{
units[i] = Convert.ToDouble(lengths[i].Split(new Char[] { ',' })[1]);
}
if ((double.TryParse(lenghttoConvert, out lenghttoConvert1)) && (Int32.TryParse(orginalunits, out orginalunits1)) && (Int32.TryParse(desiredunits, out desiredunits1)))
{
if ((desiredunits1==3)&&(orginalunits1==1))
{
double answer;
answer = units[0] * lenghttoConvert1;
Math.Round(answer, 3);
mtbOutput.Text = Convert.ToString(answer);
lblConversion.Text = "Converted to foot length";
}
}
else
MessageBox.Show("In the'Orginal and Desired Units' boxes, please enter only the numbers 1 -9, and in the 'Length to Covert' Box, please enter only numbers");
}
Так как вы можете видеть, в случае нажатия кнопки, я нахожусь в той части, где преобразования должны иметь место. Мой вопрос, еще раз, является тем, что было бы лучшим методом, который я должен использовать для обработки всех этих вычислений? У меня уже есть оператор 1 if, и если я собираюсь делать это, если мне кажется, что это будет очень утомительно, и мне интересно, был ли более эффективный способ сделать это. Спасибо за помощь, ребята, я действительно ценю это.
Многие хорошие вопросы порождают определенное мнение, основанное на опыте экспертов, но ответы на этот вопрос будут, как правило, почти полностью основанными на мнениях, а не на фактах, ссылках или конкретном опыте. –
Многие из них должны быть заменены на 'switch' просто для удобства чтения. В обоих случаях компилятор, вероятно, оптимизирует его примерно так же, и в любом случае вам стоит подумать только о производительности после того, как вы знаете, что он попал в хит. Сначала заработайте свой код и не беспокойтесь об этом. – SimpleVar