.Net - 检测所需标识符是否为关键字

时间:2009-03-05 20:10:54

标签: .net code-generation

在.net中,是否有办法检测单词是否是给定.net语言中的关键字?

我正在为这个项目使用一个相当简单的代码生成器,我想开始自动化它。现在我手工完成每一个,所以解决出现的任何问题都很容易。但是,一旦这种情况自动开始,我将需要一种方法来检测我需要用作标识符的单词是否是关键字。我仍然可以使用它,我只需要正确引用它。

我知道我可以简单地引用我生成的所有,但我想保持生成的代码很漂亮:)

我需要引用的一类例子:

vb:  Public [Class] As String = "CLASS"
c#:  public String @class = "CLASS";

4 个答案:

答案 0 :(得分:7)

也许您正在寻找IsValidIdentifier

  

[IsValidIdentifier]返回[s]为真   只有当价值符合规则时   语言和不冲突   使用关键字

CreateEscapedIdentifier

  

CreateEscapedIdentifier测试是否   标识符与any冲突   保留或语言关键字,如果   所以,返回一个等效的名称   语言特定的转义码   格式化

例如:

    CSharpCodeProvider csProvider = new CSharpCodeProvider();

    bool isValid1 = csProvider.IsValidIdentifier("class");
    // returns false

    string escapedId1 = csProvider.CreateEscapedIdentifier("foo");
    // escapedId1 = "foo"
    string escapedId2 = csProvider.CreateEscapedIdentifier("do");
    // escapedId2 = "@do"
    string escapedId3 = csProvider.CreateEscapedIdentifier("AndAlso");
    // escapedId3 = "AndAlso" (not reserved in c#)

    VBCodeProvider vbProvider = new VBCodeProvider();

    string escapedId4 = vbProvider.CreateEscapedIdentifier("AndAlso");
    // escapedId4  = "[AndAlso]" (reserved in VB)

似乎扩展/使用此设施以满足您的需求并不会太难。

答案 1 :(得分:3)

See here。男人,Jon Skeet无处不在!

答案 2 :(得分:2)

CodeDOM是否已经解决了这个问题?您可以通过这种方式构建生成的代码,并自动获得对支持CodeDOM的任何语言的支持。

答案 3 :(得分:1)

我不相信以编程方式执行此操作有任何自然方式,但您可以获得C#here和VB.Net here的完整关键字列表。