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, но не хотите терять гладкий условный синтаксис, и у него есть дополнительное преимущество, так как в будущем он остается открытым для какого-либо шаблона с нулевым объектом (например, инициализация пустого запрашиваемый).

Другие вопросы по тегам