Я не уверен, что вы подразумеваете под «Мое беспокойство заключается в том, что, если лямбда не работает, я хочу, чтобы служба продолжала работать». Я бы предположил, что с помощью кода вы можете обработать любую возможную ошибку при выполнении лямбды, а затем зарегистрировать ее произвольным образом или просто отпустить, и она будет зарегистрирована в cloudwatch. В любом случае вы можете настроить будильник и получать электронную почту, когда что-то идет не так. Это более гибкий и настраиваемый режим, но, похоже, вам не нужно делать что-то слишком сложное.
Это происходит потому, что компилятор пытается оценить оператор справа налево.
Это означает, что он видит 1.0
и решает, что он двойной (не двойной?), А затем он видит ноль
.
Так что явно не существует неявного преобразования между double
и null
(на самом деле не существует неявного преобразования между Struct
и null
).
Что вы можете сделать, так это явно сообщить компилятору, что одно из двух выражений может быть преобразовано друг в друга.
double? test = true ? null : (double?) 1.0; // 1
double? test = true ? (double?)null : 1.0; // 2
double? test = true ? default(double?) : 1.0; // 3
double? test = true ? new double?() : 1.0; // 4
double? test = true ? (double?)null : 1.0;
будет работать. Это потому, что нет преобразования первого типа выражения ( null
) в тип второго выражения ( double
).
Левая часть присваивания не используется при определении типа выражения?:.
В б? A: B
, типы A
и B
должны быть либо одинаковыми, либо один должен быть неявно конвертируемым в другой.
Поскольку компилятор не может выяснить, что для null и 1.0, чтобы быть совместимыми, значения должны быть приведены к удвоению ?. Это должно быть явно указано.
double? test = true ? (double?) null : 1.0;