Я пишу простой рефакторинг кода с Roslyn, который привел бы к выдаче исключений ArgumentNullException
, если параметр имеет значение null, например:
if (parameter == null)
throw new ArgumentNullException("parameter");
_parameter = parameter;
Теперь для C # 6 это может быть сделано более элегантно (читаемо? Type-safe ?, что угодно), используя оператор nameof
. А из C # 7 я также могу использовать выражения throw:
_parameter = parameter ?? throw new ArgumentNullException(nameof(parameter));
Но, очевидно, это не компилируется, если языковая версия проекта не настроена для поддержки C # 6 / C # 7 или любой другой языковой версии, которую запрашивает функция.
Учитывая этот контекст, мой вопрос прост. Есть ли способ определить текущую языковую версию с Roslyn, чтобы я мог во время генерации решить, какой фрагмент кода предложить? Или есть какой-то другой способ определить, поддерживается ли функция в текущем проекте C #?