Здравствуйте. Подскажите, пожалуйста, я пытаюсь преобразовать массив double в массив complex, как мне говорили ранее, в действительной части мы записываем значения массива double, а мнимую часть присваиваем нулю. Я создал структуру Complex в проекте, объявил конструктор, который в качестве параметра принимает re (массив double), а мнимую часть присваивает нулю, дальше когда я с помощью метода пытаюсь преобразовать массив double в complex и результат возвратить в переменную signal, результат пока не возвращается, подскажите, пожалуйста, в чём у меня проблема?
public struct Complex
{
// переменная, хранящая реальную часть комплексного числа
private double[] m_real;
// переменная, хранящая мнимую часть комплексного числа
private double m_imag;
public Complex(double[] re)
{
m_real = re;
m_imag = 0.0;
}
// Свойства устанавливающие значения
public double[] Re
{
get { return m_real; }
set { m_real = value; }
}
public double Im
{
get { return m_imag; }
set {m_imag = value; }
}
//Метод преобразующий массив double в complex
public Complex[] ConvertToComplex(Double[] data)
{
Complex[] signal;
Complex c1 = new Complex(data);
signal = c1;
return signal;
}
}`
Подскажите, пожалуйста ещё, я объявил метод, так как Вы написали ниже
public static Complex[] ConvertToComplex()
{
for (int i = 0; i < data.Length; i++)
{
signal[i] = data[i];
}
return signal;
}
переменные объявил как свойства, в глобальной области класса, так как из этих переменных информацию нужно получить и отправить потом в другие методы
`// массив данных с wav-файла
public static Double[] data { set; get; }
// массив данных с wav-файла в комплексном виде, предназначенный для БПФ
public static Complex[] signal { set; get; }`
При выполнении метода ConvertToComplex()
у меня выбрасывается исключение, показанное на рисунке ниже
Как мне его исправить?
Метод конвертирования массивов лучше сделать статическим, так как он по логике будет являться частью состояния типа Complex, а не экземпляров этого типа:
//Метод преобразующий массив double в complex
public static Complex[] ConvertToComplex(Double[] data)
{
Complex[] signal = new Complex[data.Length];
for (var i = 0; i < data.Length; i++)
{
var value = data[i];
Complex c1 = new Complex(value);
signal[i] = c1;
}
return signal;
}
а еще лучше - воспользоваться неявным оператором преобразования:
public static implicit operator Complex(double value)
{
return new Complex(value);
}
Конструктор вашей структуры будет выглядеть так:
public Complex(double re) : this()
{
Re = re;
Im = 0.0;
}
В случае использования неявного оператора преобразования теперь можно писать так:
double[] doubleArr = ...
Complex[] complexArr = ...
for (var i = 0; i < doubleArr.Length; i++)
{
complexArr[i] = doubleArr[i];
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Объясните простым, человеческим языком, кто такой и зачем нужен делегат в ООП вообще и в С# в частности? Спасибо!
Как изменить информацию о exe версию файла, версию продукта? К примеру изменить дату создания можно через IOFile
Не могу отредактировать ячейки из DataGridView хотя ReadOnly = False; Заполняю грид так :