C#: выбросить неверную компиляцию выражений
Я использую этот код для проверки queryable
значение:
visitor.Queryable = queryable ?? throw new Exception("error message");
Я получаю ошибку компиляции:
ошибка CS1525: недопустимое выражение выражение throw
Я использую 4.5.2 .net Framework. Есть идеи?
2 ответа
Эта функция доступна только после C# 7.0. См. В разделе " Бросок" исключения "Что нового в C# 7.0".
Если вы используете более старую VS и хотите включить функции C# 7: посмотрите, как использовать C# 7 с Visual Studio 2015? если не в VS 2017
Если вы работаете с предыдущей версией компилятора C#, как вы, возможно, из-за ошибки, то вы не можете использовать ??
оператор таким образом, поскольку бросок не возвращает правильное значение операнда. Как говорят в C# Docs:
Возвращает левый операнд, если операнд не равен нулю; в противном случае он возвращает правильный операнд.
Шаблон выглядит так:
var result = someObject ?? valueToAssignIfWasNull;
Чтобы решить это, напишите вместо:
if(queryable == null)
{
throw new Exception("error message");
}
visitor.Queryable = queryable;
Я проголосовал за принятый, но я также предложу обходной путь:
private Queryable NullAlternative()
{
throw new ArgumentNullException("Null Queryable not supported at this time.");
}
Тогда в другом месте вы можете сказать
visitor.Queryable = queryable ?? NullAlternative();
Это хорошо, если вы не можете выполнить обновление до VS2017, но не хотите терять гладкий условный синтаксис, и у него есть дополнительное преимущество, так как в будущем он остается открытым для какого-либо шаблона с нулевым объектом (например, инициализация пустого запрашиваемый).