当前位置:  开发笔记 > 编程语言 > 正文

变量名前面的@符号在C#中是什么意思?

如何解决《变量名前面的@符号在C#中是什么意思?》经验,为你挑选了4个好方法。

@符号允许您使用保留字.例如:

int @class = 15;

以上工作,当下面不会:

int class = 15;

使用@符号,名称在程序集中记录为"class",而下划线则为"_class".因此,如果另一种.NET语言没有将"class"定义为保留字,则它们可以使用名称"class". (92认同)

就在你认为你知道有关C#的所有知识的时候,你会学到新的东西.:) (80认同)

如果您使用@class作为属性名称,则可以像这样访问它:MyClass.class而不是MyClass._class (42认同)

与下划线有什么不同? (29认同)

@Vilx-在ASP.net MVC中使用它是很常见的,因为这是表达某些东西的唯一方法.例如,如果你想设置一个元素的类属性,你可以输入`new {@class ="mc"};`甚至你只是指"class",这是唯一的方法.我想说的是`@`不是**变量实际名称的一部分. (16认同)

@Vilx-呵呵,别担心,我想.主要目的是告知更多可能阅读此评论的人. (6认同)

@Ken - 谢谢你,我4年前就已经知道了.:) (3认同)

我想,我可能是错的,在这种情况下,删除我的评论 (2认同)


Micah.. 377

@符号在C#中有两个用途:

首先,它允许您使用保留关键字作为变量,如下所示:

int @int = 15;

第二个选项允许您指定字符串而不必转义任何字符.例如,'\'字符是转义字符,因此通常需要执行此操作:

var myString = "c:\\myfolder\\myfile.txt"

或者你可以这样做:

var myString = @"c:\myFolder\myfile.txt"

它如何影响字符串正是我所寻找的.谢谢! (30认同)

谢谢你,@ for strings的用法正是我想要的 (5认同)

这是IMO更好的答案 (5认同)

@Cyber​​neticTwerkGuruOrc虽然这是一个更详细的答案,但它超出了OP的要求,标记的答案解决了@与变量一起使用时的特定问题,因此(IMO)更正确*答案. (4认同)

你仍然需要通过加倍来避开双引号. (3认同)


Rasmus Faber.. 58

其他答案遗忘的重点是"@keyword"在CIL中被编译成"关键字".

因此,如果您有一个框架,例如F#,它要求您定义一个名为"class"的属性的类,您实际上可以这样做.

它在实践中并没有那么有用,但没有它会阻止某些形式的语言互操作的C#.

我通常看到它不用于互操作,但是为了避免关键字限制(通常在局部变量名称,这是唯一的效果)即.

private void Foo(){
   int @this = 2;
}

但我强烈反对这一点!只要找到另一个名称,即使变量的"最佳"名称是保留名称之一.



1> Michael Mead..:

@符号允许您使用保留字.例如:

int @class = 15;

以上工作,当下面不会:

int class = 15;


使用@符号,名称在程序集中记录为"class",而下划线则为"_class".因此,如果另一种.NET语言没有将"class"定义为保留字,则它们可以使用名称"class".
就在你认为你知道有关C#的所有知识的时候,你会学到新的东西.:)
如果您使用@class作为属性名称,则可以像这样访问它:MyClass.class而不是MyClass._class
与下划线有什么不同?
@Vilx-在ASP.net MVC中使用它是很常见的,因为这是表达某些东西的唯一方法.例如,如果你想设置一个元素的类属性,你可以输入`new {@class ="mc"};`甚至你只是指"class",这是唯一的方法.我想说的是`@`不是**变量实际名称的一部分.
@Vilx-呵呵,别担心,我想.主要目的是告知更多可能阅读此评论的人.
@Ken - 谢谢你,我4年前就已经知道了.:)
我想,我可能是错的,在这种情况下,删除我的评论

2> Micah..:

@符号在C#中有两个用途:

首先,它允许您使用保留关键字作为变量,如下所示:

int @int = 15;

第二个选项允许您指定字符串而不必转义任何字符.例如,'\'字符是转义字符,因此通常需要执行此操作:

var myString = "c:\\myfolder\\myfile.txt"

或者你可以这样做:

var myString = @"c:\myFolder\myfile.txt"


它如何影响字符串正是我所寻找的.谢谢!
谢谢你,@ for strings的用法正是我想要的
这是IMO更好的答案
@Cyber​​neticTwerkGuruOrc虽然这是一个更详细的答案,但它超出了OP的要求,标记的答案解决了@与变量一起使用时的特定问题,因此(IMO)更正确*答案.
你仍然需要通过加倍来避开双引号.

3> Rasmus Faber..:

其他答案遗忘的重点是"@keyword"在CIL中被编译成"关键字".

因此,如果您有一个框架,例如F#,它要求您定义一个名为"class"的属性的类,您实际上可以这样做.

它在实践中并没有那么有用,但没有它会阻止某些形式的语言互操作的C#.

我通常看到它不用于互操作,但是为了避免关键字限制(通常在局部变量名称,这是唯一的效果)即.

private void Foo(){
   int @this = 2;
}

但我强烈反对这一点!只要找到另一个名称,即使变量的"最佳"名称是保留名称之一.


这可能是个好建议.我_think_ @限定符相当于VB.Net的方括号,所以VB等价于:dim [Class] as Int32 = 15
@Michael它完全相当于VB.NET的方括号语法.http://stackoverflow.com/questions/6639688/using-keywords-as-identifiers-in-f指出F#为了相同的目的在标识符周围使用双反引号.
作为一个迟到的评论 - "不是它有用" - 在MVC中,你可以将一个名为"class"的属性传递给render e - 它变成html"class"来定义CSS类.

4> Joel Coehoor..:

它允许您使用C#关键字作为变量.例如:

class MyClass
{
   public string name { get; set; }
   public string @class { get; set; }
}

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有