Существует ли программный способ идентифицировать зарезервированные слова .Net?

Я ищу чтение .Net, С# зарезервированных ключевых слов программно в VS 2015.

Я получил ответ на чтение зарезервированных слов С# в [link] [1].

CSharpCodeProvider cs = new CSharpCodeProvider();
var test = cs.IsValidIdentifier("new"); // returns false
var test2 = cs.IsValidIdentifier("new1"); // returns true

Но для var, dynamic, List, Dictionary и т.д. приведенный выше код возвращает неправильный результат.

Есть ли способ идентифицировать ключевые слова .net во время выполнения, а не перечислять ключевые слова в списке?

string[] _keywords = new[] { "List", "Dictionary" };

Ответы

Ответ 1

Это прекрасная программа на С#:

using System;

namespace ConsoleApplication6
{
    class Program
    {
        static void Main(string[] args)
        {
            int var = 7;
            string dynamic = "test";
            double List = 1.23;

            Console.WriteLine(var);
            Console.WriteLine(dynamic);
            Console.WriteLine(List);
        }
    }
}

Итак, ваша предпосылка неверна. Вы можете найти ключевые слова, просмотрев их в кратком списке. Просто потому, что что-то имеет смысл, это вовсе не означает "зарезервировано".

Не позволяйте подсветке онлайн-синтаксиса путать вас. Скопируйте и вставьте его в Visual Studio, если вы хотите видеть правильное выделение.

Ответ 2

Как объясняется nvoigt, ваш метод программного определения того, является ли строка ключевым словом, является корректным. Чтобы быть полным (после проверки Reflector), он должен быть:

bool IsKeyword(string s)
{
    var cscp = new CSharpCodeProvider();
    return s != null
           && CodeGenerator.IsValidLanguageIndependentIdentifier(s)
           && s.Length <= 512
           && !cscp.IsValidIdentifier(s);
}

(Для версии VB.NET требуется 1023 и проверка на "_".)