9

可能重复:
C# 中变量名中的 @ 字符的用途/含义是什么?

我正在做一些.net开发,我注意到我可以在任何方法调用之前添加一个@符号,即:

var message = dog.@SayHello();

只是想知道,为什么可以这样做?

4

5 回答 5

10

@符号可以转义关键字并将它们转换为普通标识符。大多数 .net 语言都支持这样的机制,因为关键字是依赖于语言的,因此用其他语言编写的代码可能会与您的语言中的关键字发生冲突,甚至不会注意到它。

有些人喜欢使用@this用于第一个参数的扩展方法。

public static void MyExtension(this MyType @this)

另一个有用的场景是使用成员来表示 html 属性。那么如果没有这个特性,你就不能代表这个class属性。

于 2011-08-30T15:21:40.967 回答
6

如果@您正在与使用 C# 关键字作为标识符的另一种语言编写的代码进行互操作,则符号可以作为任何标识符的前缀:

object @class; //allowed
object class;  //error
于 2011-08-30T15:22:03.107 回答
6

这只是C# 中有效标识符定义的一部分。

于 2011-08-30T15:22:26.360 回答
3

@允许您使用否则会被解释为关键字的标识符。

例如,如果你想有一个名为 class 的变量,你可以这样写:

int @class;

当然,因为你能做到并不意味着这样做是个好主意。

一些有用的情况是代码生成器从模板或外部源创建 C# 代码。例如xsd.exe,一个 SDK 命令行工具创建备份 XML 模式的 C# 类。如果您的 XML 架构包含在 C# 中保留的元素或属性名称(例如类),xsd.exe则将在匹配的 C# 类中保留该名称,但会为其添加前缀@.

于 2011-08-30T15:24:08.990 回答
1

这是一个例子,因为我们可以,并不意味着我们应该

于 2011-08-30T15:23:02.513 回答