是否有一种编程方式来识别.Net保留字?

时间:2016-05-31 05:35:10

标签: c# .net reserved-words

我正在寻找在VS 2015中以编程方式阅读.Net,C#保留关键词。

我得到了在[link] [1]中读取C#保留字的答案。

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

但对于vardynamicListDictionary等,上述代码返回错误的结果。

有没有办法在运行时识别.net关键字而不是在列表中列出关键字?

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

2 个答案:

答案 0 :(得分:32)

这是一个非常好的C#程序:

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);
        }
    }
}

所以你的前提是错的。您可以在短名单中查找keywords。仅仅因为某些东西具有意义并不意味着它以任何方式保留"保留"。

不要让在线语法突出显示让您感到困惑。如果要查看正确的突出显示,请将其复制并粘贴到Visual Studio中。

答案 1 :(得分:3)

正如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并检查“_”。)