#c# #constants #mathnet-numerics
#c# #константы #mathnet-numerics
Вопрос:
Вот код C # :
const MathNet.Numerics.LinearAlgebra.Matrix<Complex32> ket_Zero =
MathNet.Numerics.LinearAlgebra.Matrix<Complex32>.Build.DenseOfRowMajor(2, 1,
new MathNet.Numerics.Complex32[] {
new MathNet.Numerics.Complex32(1,0),
new MathNet.Numerics.Complex32(0,0)
} );
Ничего страшного, если я не добавлю ключевое слово const.
Но если я хочу определить это как константу, Microsoft Visual Studio отклоняет с
Код ошибки CS0133 = Выражение, присваиваемое ‘Form1.ket_Zero’, должно быть постоянным.
Я также пытался заменить const
на readonly
, но тоже не сработает.
Как я могу определить матрицы как константы?
Комментарии:
1. Почему именно
readonly
не работает? В чем ошибка?2. Если я использую только для чтения, Visual Studio отклоняет с кодом ошибки CS0191 = Поле только для чтения не может быть назначено (за исключением конструктора или инициализатора переменной)
3. Является
ket_Zero
полем класса?4. ДА. Определение является глобальным в системе. Windows. Класс формы Form1. Я только что узнал, что работает только для чтения, и ошибка, которую я получил ранее, заключается в том, что после того, как я определил ее как доступную только для чтения, другая часть программы попыталась переопределить ее. Извините. Просто вторая копия тех же строк в методе (вызывающем ошибку), который я использовал ранее, прежде чем пытаться поместить его в глобальный контекст. В итоге работает только для чтения, но const вызывает ошибку.
Ответ №1:
Вот документация из MSDN о том, что может быть определено как const. Я процитирую необходимую часть.
Только встроенные типы C # (исключая System.Объект) может быть объявлен как const. Пользовательские типы, включая классы, структуры и массивы, не могут быть const.
В вашем случае вы пытаетесь определить MathNet.Numerics.LinearAlgebra.Matrix<Complex32>
как const, но используется объявленный тип, поэтому не может быть const
Комментарии:
1. @Avon, я рад быть полезным