我正在编写一个代码生成器,其中的变量名由用户提供。
以前的答案建议使用 Regex 或 CodeDomProvider,前者会告诉您标识符是否有效,但不检查关键字,后者检查关键字,但似乎不会检查代码已知的所有类型。 How to determine if a string is a valid variable name?
例如,用户可以将变量命名为 List
或 Type
,但这是不可取的。我该如何防止这种情况发生?
最佳答案
最简单的方法是将 C# 关键字列表添加到您的应用程序。 MSDN有完整列表here .
如果你真的想变得花哨,你可以dynamically compile your generated code并检查您关心的具体错误。在这种情况下,您专门寻找错误 CS1041 :
error CS1041: Identifier expected; '**' is a keyword
您可能希望忽略任何有关未解析的引用、未声明的标识符等的错误。
正如其他人所建议的,您可以在标识符前加上 @
,如果您不希望用户检查生成的代码,这很好。但是,如果这是他们必须维护的东西,我会避免这样做,因为(在我看来)它会使代码变得嘈杂,就像 PHP 中到处都是 $
或那些坚持将 this.
放在每个该死的字段引用的前面。
关于c# - 如何在 C# 中检查一个字符串不是关键字或类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4877713/