在阅读有关 C# 的书时,我遇到了使用 @ 来“重载”或使用 C# 关键字作为标识符的代码。我猜这不是一个好习惯,因为它会导致歧义。我的想法是否正确,或者是否有时间应该使用它?
8 回答
事实上,避免这种情况几乎总是值得的。它可能有用的主要有效时间是在处理具有恰好是 C# 关键字的类 / 等的外部库(来自另一种语言)时,但我承认我在现实中从未遇到过这个问题。它有助于 C# 允许您在覆盖/实现接口时重命名方法参数名称,从而避免一组常见的情况。
另一个(可以说是懒惰的)用途是代码生成。如果您总是在字段/变量/等前面加上@theName,那么您不必担心特殊情况。就个人而言,我只是对 C# 关键字/上下文关键字列表进行交叉检查,并添加下划线之类的内容。
@ 符号的其他用途(逐字字符串文字)是 @“更有用”。
我在 asp.net MVC 视图中使用过它,您在其中使用 HtmlHelper 定义 css 类。
<%= Html.TextBox("Name", null, new { @class = "form-field" }) %>
我认为将保留关键字作为变量名是一个坏主意。恕我直言,它使代码的可读性降低。尽管在某些情况下它可能有用。例如,在 ASP.NET MVC 视图中,您可以编写:
<%= Html.TextBox("name", new { @class = "some_css_class" }) %>
正如其他人指出的那样,@-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.
";
我只使用并看到它仅与字符串一起使用,例如:
string name=@"some funny name";
从来不知道这一点,但从你所说的我会避免它。
我在 C# 中使用 @ 的唯一一次是用于预格式化的字符串。
@"String\no\need\to\escape\slashes"
您可以安全地避免任何会造成混乱的事情。:-)
我唯一使用 @ 的地方是字符串。
来自 MSDN:@-quoting 的优点是不处理转义序列,这使得编写起来很容易,例如,完全限定的文件名:
@"c:\Docs\Source\a.txt" // rather than "c:\\Docs\\Source\\a.txt"
我避免使用它,除了扩展方法,我认为它有助于可读性:
public static void Foo(this object @this)
{
Console.WriteLine(@this.ToString());
}