Оптимизировать код за счет сокращения количества условных операторов - C#
Формулировка задачи:
Доброго времени суток.
Прошу помощь в сокращение размера кода, если конечно это возможно.
Z, R, Fi - берутся из листа Excel. R = 60, Z = 68, Fi = 36.
В dataGridView1 так же загружены данные с листа Excel.
for (int ugol = 0; ugol < Fi; ugol++)
{
if (ugol == 0)
{
// для угла Fi = 0
Double[,] angle0 = new double[Z, R * 2 + 1];
for (int i = 1; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle0[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString());
}
}
}
else if (ugol == 1)
{
// для угла Fi = 10
Double[,] angle10 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle10[i, j] = Convert.ToDouble(dataGridView1.Rows[i + Z + 4].Cells[j].Value.ToString());
}
}
}
else if (ugol == 2)
{
// для угла Fi = 20
Double[,] angle20 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle20[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
}
}
}
else if (ugol == 3)
{
// для угла Fi = 30
Double[,] angle30 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle30[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
}
}
}
else if (ugol == 4)
{
// для угла Fi = 40
Double[,] angle40 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle40[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
}
}
}
else if (ugol == 5)
{
// для угла Fi = 50
Double[,] angle50 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle50[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
}
}
}
else if (ugol == 6)
{
// для угла Fi = 60
Double[,] angle60 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle60[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
}
}
}
else if (ugol == 7)
{
// для угла Fi = 70
Double[,] angle70 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle70[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
}
}
}
..... /* весь код не влез. весь код предоставлен в прикрепленном файле.*/
/* и так до */
else //if (ugol == 35)
{
// для угла Fi = 350
Double[,] angle350 = new double[Z + 1, R * 2 + 1];
for (int i = 0; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle350[i, j] = Convert.ToDouble(dataGridView1.Rows[i + ugol * (Z + 4) - (ugol - 1)].Cells[j].Value.ToString());
}
}
}
}
}Решение задачи: «Оптимизировать код за счет сокращения количества условных операторов»
textual
Листинг программы
private static void GetValues(int Fi, int Z, int R)
{
Dictionary<int, double[,]> angles = new Dictionary<int, double[,]>();
for (int ugol = 0; ugol < Fi; ugol++)
{
var size = ugol == 0 ? Z : Z + 1;
double[,] angle = new double[size, R * 2 + 1];
for (int i = 1; i <= Z; i++)
{
for (int j = 0; j <= R * 2; j++)
{
angle[i - 1, j] = Convert.ToDouble(dataGridView1.Rows[i].Cells[j].Value.ToString());
}
}
angles.Add(ugol * 10, angle);
}
}