在阅读一本关于C#的书时,我看到了使用@符号“重载”或将C#关键字用作标识符的代码。我猜想这不是一个好的实践方法,因为它会导致歧义。我的想法正确吗?还是有时候应该使用它?
实际上,几乎总是值得避免使用 "@" 符号。它可能会有用的主要情况是当处理来自另一种语言的外部库(具有与 C# 关键字相同的类/等)时,但我承认在现实中我从未遇到过这个问题。C# 允许在重载/实现接口时重命名方法参数名称,因此可以避免一些常见情况。
另一个(可以说是懒惰的)用法是在代码生成时;如果你总是用 @theName 作为字段/变量等的前缀,那么你就不必担心特殊情况了。个人而言,我会对照 C# 关键字/上下文关键字列表进行交叉检查,并添加下划线之类的东西。
"@" 符号的另一种用途(保留字符串字面量)则更加有用。
我在 ASP.NET MVC 视图中使用它,其中你可以使用 HtmlHelper 定义一个 CSS 类。
<%= Html.TextBox("Name", null, new { @class = "form-field" }) %>
正如其他人指出的那样,使用@引用符号可以在字符串处理中非常有用。以下是一些示例:
// 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.
";
我认为将保留关键词作为变量名是一个不好的想法。在我看来,这会使代码变得更加难以阅读。虽然有一些情况下它可能是有用的。例如,在ASP.NET MVC视图中,您可以编写以下代码:
<%= Html.TextBox("name", new { @class = "some_css_class" }) %>
我只使用过并且只看到它用于字符串,例如:
string name=@"some funny name";
我之前不知道这个,但从你的说法来看,我会避免使用它。
我在C#中仅在预格式化字符串时使用@。
@"String\no\need\to\escape\slashes"
你可以安全地避免任何会造成混淆的事情。:-)
我只在字符串中使用@。
来自MSDN: @-引用的优点是不处理转义序列,这使得编写完全限定的文件名变得容易:
@"c:\Docs\Source\a.txt" // 而不是 "c:\\Docs\\Source\\a.txt"
我避免使用它,除了在扩展方法中,我认为这有助于提高可读性:
public static void Foo(this object @this)
{
Console.WriteLine(@this.ToString());
}
Html.Action(... , new {..., @class = "Test" });
。 - Mehrdad Afshari