8

在阅读有关 C# 的书时,我遇到了使用 @ 来“重载”或使用 C# 关键字作为标识符的代码。我猜这不是一个好习惯,因为它会导致歧义。我的想法是否正确,或者是否有时间应该使用它?

4

8 回答 8

18

事实上,避免这种情况几乎总是值得的。它可能有用的主要有效时间是在处理具有恰好是 C# 关键字的类 / 等的外部库(来自另一种语言)时,但我承认我在现实中从未遇到过这个问题。它有助于 C# 允许您在覆盖/实现接口时重命名方法参数名称,从而避免一组常见的情况。

另一个(可以说是懒惰的)用途是代码生成。如果您总是在字段/变量/等前面加上@theName,那么您不必担心特殊情况。就个人而言,我只是对 C# 关键字/上下文关键字列表进行交叉检查,并添加下划线之类的内容。

@ 符号的其他用途(逐字字符串文字)是 @“更有用”。

于 2009-07-19T10:12:12.523 回答
17

我在 asp.net MVC 视图中使用过它,您在其中使用 HtmlHelper 定义 css 类。

<%= Html.TextBox("Name", null, new { @class = "form-field" }) %>
于 2009-07-19T10:16:05.573 回答
4

我认为将保留关键字作为变量名是一个坏主意。恕我直言,它使代码的可读性降低。尽管在某些情况下它可能有用。例如,在 ASP.NET MVC 视图中,您可以编写:

<%= Html.TextBox("name", new { @class = "some_css_class" }) %>
于 2009-07-19T10:16:43.760 回答
4

正如其他人指出的那样,@-quoting 对字符串非常有用。这里有些例子:

 // Not having to escape backslashes.
String a = @"C:\Windows\System32";

// Escaping quotes.
String b = @"The message is ""{0}"".";

// String with embedded newlines.
String c = @"An error occured.
Please try again later.
";
于 2009-07-19T10:36:15.033 回答
1

我只使用并看到它仅与字符串一起使用,例如:

string name=@"some funny name";
于 2009-07-19T10:12:22.070 回答
1

从来不知道这一点,但从你所说的我会避免它。

我在 C# 中使用 @ 的唯一一次是用于预格式化的字符串。

@"String\no\need\to\escape\slashes"
于 2009-07-19T10:13:47.463 回答
1

您可以安全地避免任何会造成混乱的事情。:-)

我唯一使用 @ 的地方是字符串。

来自 MSDN:@-quoting 的优点是不处理转义序列,这使得编写起来很容易,例如,完全限定的文件名:

@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"

于 2009-07-19T10:21:20.740 回答
0

我避免使用它,除了扩展方法,我认为它有助于可读性:

public static void Foo(this object @this)
{
     Console.WriteLine(@this.ToString());
}
于 2009-07-19T10:17:17.130 回答