Спецификация языка Java ( JLS ) описывает применимость оператора -
для арифметических операций:
В каждом случае тип каждого из операндов бинарного оператора должен быть типом, который можно преобразовать ( §5.1.8 ) в примитивный числовой тип или ошибка времени компиляции.
blockquote>Тип
BigDecimal
не является ни примитивным числовым типом (таким какint
,short
,float
,double
), ни конвертируемым в единицу. Напротив, хотяInteger
,Float
,Double
иShort
также не являются примитивными числовыми типами, для них определен оператор-
, так как они могут быть преобразованы в их примитивные аналоги ( JLS- 5.1.8 ).Как уже указывалось в других ответах, используйте BigDecimal.compareTo (BigDecimal) для сравнения
BigDecimal
экземпляров.
Я видел это поведение прежде, и я обошел его путем украшения обработчика DoWork System.Diagnostics.DebuggerNonUserCode
атрибут:
[System.Diagnostics.DebuggerNonUserCode]
void bw_DoWork(object sender, DoWorkEventArgs e)
{ ... }
Обратите внимание, что Вы будете только видеть это, если Вы будете работать в отладчике; даже без атрибута, все - как это должно быть при выполнении от оболочки.
Я искал это снова, и я все еще не вижу серьезного основания, почему необходимо сделать это. Я называю это ошибкой отладчика.
У меня была эта проблема прежде. E. Ошибка только установлена, когда Вы не работаете в Режиме отладки. Если Вы работаете в Отладке, exectuion останавливается в пятне Исключения. Однако запустите ту же программу в Не режим отладки (в Отладке VS->, Запускаются Без Отладки или Ctrl+F5), и противное диалоговое окно исключения не подойдет, и e. Ошибка будет исключением. Не уверенный, почему, но это - то, как это работает....
Ваш подход корректен. Просто нажатие продолжает сообщение и продолжает идти. Если в сомнении, протестируйте его за пределами сеанса отладки.