C#@运算符(不适用于字符串文字)

时间:2012-08-07 18:01:33

标签: c#

这意味着@是什么意思(我知道它使用的是过时的.NET Framework 1.1 ConfigurationSettings.AppSettings)?

@ConfigurationSettings.AppSettings["some_setting"];

这不是字符串文字:Using the literal '@' with a string variable

实际代码:

_scale_id_regex = @ConfigurationSettings.AppSettings["ScaleIdRegEx"];

在作为Windows服务一部分的常规.cs文件中,_scale_id_regex只是该类中的私有字符串,因此不涉及ASP.NET和Razor。

4 个答案:

答案 0 :(得分:21)

它被称为逐字标识符。它允许您在保留字后命名变量。 e.g。

string @string = string.Empty;
object @object = new object();
int @int = 1;
...

您拥有的代码是有效的,但我不相信@服务有任何实际目的。由于这比我刷新页面的速度更快,这就是ECMA C#语言规范第9.4.2节所说的内容。

  

前缀“@”允许使用关键字作为标识符,即   在与其他编程语言交互时很有用。该   character @实际上不是标识符的一部分,所以标识符   可能在其他语言中看作普通标识符,没有   字首。带有@前缀的标识符称为逐字   标识符

您发布的代码是有效的,因为语言规范允许这样做,尽管不鼓励。

  

[注意:对于不是关键字的标识符,使用@前缀是   允许,但作为一种风格强烈劝阻。结束说明]

答案 1 :(得分:4)

您可以使用@作为标识符的前缀,以便将它们与保留字等区分开来:

var @class = 1;

(例如,@ class,os主要在razor视图中用于指定css类。否则,请避免使用这样的名称:)

在LINQ中也很有用,例如from @group in...

答案 2 :(得分:2)

Precusor:

不要低估这个,因为问题说它是在常规的.cs课程中。在我写这篇文章时,问题中没有任何内容表明这不包含在剃须刀视图中。如果没有上下文,那将会使更多更有意义。

我在这里保留这个答案,以防其他用户到这里寻找@可能做的事情。

答案:

它是一种从剃刀视图(.cshtml)访问服务器端变量和方法的方法。 它非常常用于:

  1. 读取会话变量:

    @Session["something"]

  2. 访问Html帮助程序方法

    @Html.RenderPartial("someview","somecontroller");

  3. 完全按照你的问题行事(虽然我个人认为这是不好的做法)

    @ConfigurationManager.AppSettings["whatever"];

  4. 启动代码块并使用foreach

    之类的内容
    @{
        foreach(var item in Model)
        {
            <span class="modelProperty">@Model.SomeTextProperty</span>
        }
    }
    

答案 3 :(得分:0)

这里的'@'符号实际上根本不是C#操作符。它标志着ASP.NET Razor-syntax代码块的开始。 (但是,当然,代码块中有C#。)