c# - 如何在 C# 中检查一个字符串不是关键字或类型

标签 c# types keyword identifier

我正在编写一个代码生成器,其中的变量名由用户提供。

以前的答案建议使用 Regex 或 CodeDomProvider,前者会告诉您标识符是否有效,但不检查关键字,后者检查关键字,但似乎不会检查代码已知的所有类型。 How to determine if a string is a valid variable name?

例如,用户可以将变量命名为 ListType,但这是不可取的。我该如何防止这种情况发生?

最佳答案

最简单的方法是将 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/

相关文章:

python - 指定泛型集合中重写方法的类型提示

java - 类型翻译问题

php - 使用带有 PHP 的 Google AdWords API 获取关键字每次点击费用和每月搜索量

rust - 为什么 `let true = false` 会失败,真的可以吗?

javascript - 检查字符串是否包含关键字数组

c# - 在 .NET 中的实时网站上获取文件文件路径?

c# - 在 Linq 语句中无法识别对象,尽管在同一方法中可以访问该对象

C# 访问接口(interface)数组中对象的非接口(interface)方法

c# - 无法在 WPF MVVM 中将 View 绑定(bind)到 ViewModel

c++ - Python 参数类型 C++ 签名