Существует ли программный способ идентифицировать зарезервированные слова .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 и проверка на "_".)