【问题标题】:how to escape key words in c#?如何在c#中转义关键字?
【发布时间】:2010-04-06 20:54:48
【问题描述】:

我想在c#中做相当于下面的VB

Function([class]) "hello"

这个和c#中的这个一样

class=>"hello"

问题是class这个词是语言中的一个关键词。但我想用它作为变量名。在 VB 示例中,您可以使用 [] 括号来“转义”该关键字并允许将其用作变量名。

有没有办法在 C# 中做到这一点?

【问题讨论】:

    标签: c# vb.net lambda


    【解决方案1】:

    您需要在变量名中添加@

    @类

    但这是一种非常不好的做法。每次您将变量命名为关键字时,一只小猫就会死去 :)

    【讨论】:

    • @Andrew Bezzub,我可以看到它如何被视为不好的做法。但我需要它用于一个非常专业的场景,在这里解释细节需要太长时间。话虽如此,我想听听您对为什么认为这是不好的做法的想法。
    • 有些作品是key词是有原因的。我能想到这样做的唯一原因是如果您正在编写编译器或某种解析器。但是,为什么有一个不是关键字的变量名不是一个选项,这样做有无数种可能性。即使使用 classInstance 也比 @class 好。
    • @Roberto Sebestyen,所有变量都应该具有这样的名称,以便任何人都可以很容易地理解每个变量的用途。我认为名称为“类”的变量并不能说明太多。如果你有一个你认为有用的案例,请告诉我,我在现实世界的项目中没有遇到过这样的案例。
    • 您可能想要使用此功能的另一个原因:假设您定义了自己的特定领域语言,然后编写了一个将您的 DSL 转换为 C# 的转换器,而不是编写您自己的编译器。你的 DSL 的保留字可能不是 C# 的保留字;您的 DSL 的用户可能会合理地希望创建一个名为“类”或“事件”的属性。如果您的代码生成器生成 @class 或 @event,那么您不必制定一些更复杂的方案来编码从 DSL 到 C# 的转换。
    • 在没有深入细节的情况下,我实际上正在从事一些涉及从强类型 C# 代码生成 HTML、CSS 和 Javascript 的工作。关键字 'class' 可以是 HTML 和 C# 中的关键字,这就是我需要在 C# 中转义它的原因。
    【解决方案2】:

    保留字使用@

    @class=>"hello"
    

    【讨论】:

      【解决方案3】:

      您可以在任何关键字前面加上@

      但我不认为这是推荐的做法,而且代码分析肯定会抱怨它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-19
        • 2019-03-21
        • 1970-01-01
        • 1970-01-01
        • 2013-01-21
        • 2013-08-04
        • 1970-01-01
        相关资源
        最近更新 更多