C#中使用@的最佳实践

8

在阅读一本关于C#的书时,我看到了使用@符号“重载”或将C#关键字用作标识符的代码。我猜想这不是一个好的实践方法,因为它会导致歧义。我的想法正确吗?还是有时候应该使用它?

8个回答

18

实际上,几乎总是值得避免使用 "@" 符号。它可能会有用的主要情况是当处理来自另一种语言的外部库(具有与 C# 关键字相同的类/等)时,但我承认在现实中我从未遇到过这个问题。C# 允许在重载/实现接口时重命名方法参数名称,因此可以避免一些常见情况。

另一个(可以说是懒惰的)用法是在代码生成时;如果你总是用 @theName 作为字段/变量等的前缀,那么你就不必担心特殊情况了。个人而言,我会对照 C# 关键字/上下文关键字列表进行交叉检查,并添加下划线之类的东西。

"@" 符号的另一种用途(保留字符串字面量)则更加有用。


3
"\是\非常\有用的" @"你不觉得吗?" - Vinko Vrsalovic
1
我遇到的一个使用 @ 符号的案例是在 ASP.NET MVC 中,当您需要传递一个匿名类型,并且该类型具有 C# 关键字的名称属性时,例如 Html.Action(... , new {..., @class = "Test" }); - Mehrdad Afshari
@Mehrdad:请查看David Liddle的答案。 - Fredrik Mörk
@Fredrick:哇!我没看到那个。多么相似啊! - Mehrdad Afshari

17

我在 ASP.NET MVC 视图中使用它,其中你可以使用 HtmlHelper 定义一个 CSS 类。

<%= Html.TextBox("Name", null, new { @class = "form-field" }) %>

4

正如其他人指出的那样,使用@引用符号可以在字符串处理中非常有用。以下是一些示例:

 // 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.
";

我倾向于一直使用这个。比转义字符容易多了。 - corymathews

4

我认为将保留关键词作为变量名是一个不好的想法。在我看来,这会使代码变得更加难以阅读。虽然有一些情况下它可能是有用的。例如,在ASP.NET MVC视图中,您可以编写以下代码:

<%= Html.TextBox("name", new { @class = "some_css_class" }) %>

1

我只使用过并且只看到它用于字符串,例如:

string name=@"some funny name";

1
我认为当字符串包含 \ 时,它更易用,这样你就不需要转义它。 - Jean Azzopardi

1

我之前不知道这个,但从你的说法来看,我会避免使用它。

我在C#中仅在预格式化字符串时使用@。

@"String\no\need\to\escape\slashes"

1
我觉得你是指反斜杠。 - Josef Pfleger

1

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

我只在字符串中使用@。

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

@"c:\Docs\Source\a.txt" // 而不是 "c:\\Docs\\Source\\a.txt"


0

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

public static void Foo(this object @this)
{
     Console.WriteLine(@this.ToString());
}

3
您认为不使用代码定义“this”,而是采用类似于“this object o”这样的命名约定是否更易于理解?类似于使用“i”作为整数变量名的人们那样。例如:for (int i = 0; i >... - David
我不认为它会造成任何混淆。记住,在定义扩展方法时,其中一个参数充当普通方法中的“this”等效项。我认为称之为@this强调了这一事实,特别是在浏览代码时。 - Gregory Higley
2
更好的做法是想出一个真正有意义的参数名称。 :) - Guffa
2
鉴于这是 C# 的一个相当晦涩的特性,我认为它会造成混淆。将参数传达为普通方法中的“this”等效项可以更好地通过编写“_this”来实现,这被普遍理解为一个简单的名称,而“@”是一个元字符,会导致困惑、搜索和浪费时间。 - harms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接