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