在C#中使用@的最佳实践

时间:2009-07-19 10:09:09

标签: c# keyword

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

8 个答案:

答案 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());
}