Как обратиться к элементам структуры в c#?

Перевожу программу с C++ на C#. Там было обращение к элементам структуры complex, как к массиву. В C# выходит ошибка CS0021 Не удается применить индексирование через [] к выражению типа "float".
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace spectr_Furie
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // открытие изображения
            Bitmap image;
            OpenFileDialog open_dialog = new OpenFileDialog();
            open_dialog.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG|All files (*.*)|*.*"; //формат загружаемого файла
            if (open_dialog.ShowDialog() == DialogResult.OK) //если в окне была нажата кнопка "ОК"
            {
                try
                {
                    image = new Bitmap(open_dialog.FileName);
                    pictureBox1.Size = image.Size;
                    pictureBox1.Image = image;
                    pictureBox1.Invalidate();
                }
                catch
                {
                    DialogResult rezult = MessageBox.Show("Невозможно открыть выбранный файл",
                    "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }

        private void выполнитьАнализToolStripMenuItem_Click(object sender, EventArgs e)
        {
            int n = pictureBox1.Height; // n строк изображения, m столбцов
            int m = n;
            double N_1 = Math.Pow(n,-1); // множитель перед суммой
            double pi_2_N = 2 * Math.PI/n;
            int j, k, u, v;
            float[] furie = new float[2];
            float sum_real, sum_imaging; // суммы действительной и мнимой частей
            float arg; // аргумент sin, cos
            Bitmap image = new Bitmap(pictureBox1.Image);

            for (u = 0; u < 20; u++)
                for (v = 0; v < 20; v++)
                {
                    sum_real = sum_imaging = 0;
                    for (j = 0; j < n; j++)
                        for (k = 0; k < n; k++)
                        {
                            if (image.GetPixel(j,k) != Color.White)
                            {
                                arg = (float)pi_2_N * (u * j + v * k);
                                sum_real += (float)Math.Cos(arg);
                                sum_imaging += (-1) * (float)Math.Sin(arg);
                            }
                        }
                    furie[u][v].Re = N_1 * sum_real;
                    furie[u][v].Im = N_1 * sum_imaging;
                }
        }

        struct complex //комплексное число
        {
            public float Re;
            public float Im;
        }
    }
}
  • Вопрос задан
  • 650 просмотров
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
int n = pictureBox1.Height; // n строк изображения, m столбцов
int m = n;
да ну ладно... ?!!!!!!!!!... почему не
int n = pictureBox1.Height; // n строк изображения, m столбцов
int m = pictureBox1.Width;
откуда вы знаете, что там точный квадрат?.. но это мелочи на фоне остального
struct complex //комплексное число
        {
            public float Re;
            public float Im;
        }
и
furie[u][v].Re = ...
furie[u][v].Im = ...
ну тогда и пишите
var furie = new complex[...
именно complex .. !!!
.. дальше.. какой размерности?...
furie[u][v].Re = ...
furie[u][v].Im = ...

при этом
for (u = 0; u < 20; u++)
    for (v = 0; v < 20; v++)

вот эти 20точки то откуда? вы перебираете индексы от 0 до 19 по двум измерениям.. итог:
var furie = new complex[20,20];
... но это ни чего не гарантирует в смысле какой то правильной работы. бог знает сколько еще у вас не явных косяков.. да верен ли код, который вы переводите?.. но заявленные ошибки компилятор пропустит.. ))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dasha_programmist
@dasha_programmist
ex Software Engineer at Reddit TS/React/GraphQL/Go
ну ты сначала написал 2 элемента в массиве float[] furie = new float[2];
а потом обращаешься в цикле for (u = 0; u < 20; u++) furie[u] - выход за пределы массива

а вообще стремный код какой-то furie[u][v].Re - шо цэ такэ?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы