Возможной альтернативой тому, что Nullable<double>вы должны придерживаться, double?является ( не число ): public double? mgToGrain(double mg) { if (mg < 0) { return null; } double grain = mg * myValues["mgTograin"]; return grain; }
if
Я публичный двойной mgToGrain ( двойной мг ) { double grain = mg * myValues [ "mgTograin" ]; возврат зерна ; if ( mg < 0 ) { return null ; } } ` to make конвертер, который преобразует метрики в империалы. Также я делаю для него единичный тест. удваивать? я передаю отрицательное значение, метод должен возвращаться дважды. Возможно ли вернуть double.NaN из метода, который возвращает public double mgToGrain ( двойной мг ) { если ( мг < 0 ) возвращается дважды . NaN ; else return mg * myValues [ "mgTograin" ]; } ... double x = ... if ( double . IsNaN ( mgToGrain ( x ))) { ... } .
Nullable
Типы значений не могут быть нулевыми. Вы должны использовать тип, либо путем возврата, либоpublic double? mgToGrain(double mg) { return null; }return grain;public double? mgToGrain(double mg) { double grain = mg * myValues["mgTograin"]; if (mg < 0) { return null; } return grain; }
null
Также исправлен код, когда вы возвращаетесь из функции раньше if.
Здесь у вас есть действительно хорошие объяснения abdouble типов значений и null.
Вы не можете вернуться nullиз метода, объявленного для возврата double. У вас есть несколько вариантов создания API здесь:
try, AKAcatch - для этого подхода потребуются абоненты для проверки значения nullдо его использования или применения коллаборации null для обработки недопустимых значений возвратаdouble. Звонящие, которые хотят обрабатывать ошибки, нуждаются в try/ outблокеoutпараметр - это будет похоже на API TryParseи TryGetValueAPI в .NET.Примечание. Перед возвратом из метода вам нужно проверить отрицательный результат. В вашей текущей реализации код, который проверяет наличие негативов, недостижим.