Roslyn / .NET Compiler Platform получает текущую версию проекта на языке C # - PullRequest
0 голосов
/ 04 мая 2018

Я пишу простой рефакторинг кода с 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 #?

...