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

C# 在C中使用@的最佳实践#,c#,keyword,C#,Keyword,在阅读一本关于C#的书时,我遇到了使用@来“重载”或使用C#关键字作为标识符的代码。我猜这不是一个好的做法,因为它会导致歧义。我这样想是对的,还是有时应该这样做?事实上,这几乎总是值得避免的。它可能有用的主要时间是在处理一个外部库(来自另一种语言)时,该库的类/etc恰好是一个C#关键字,但我承认我在现实中从来没有遇到过这个问题。它有助于C#允许您在重写/实现接口时重命名方法参数名称,从而避免一组常见的情况 另一个(可以说是懒惰的)用途是在代码生成中;如果总是在字段/变量/etc前面加上@the

在阅读一本关于C#的书时,我遇到了使用@来“重载”或使用C#关键字作为标识符的代码。我猜这不是一个好的做法,因为它会导致歧义。我这样想是对的,还是有时应该这样做?

事实上,这几乎总是值得避免的。它可能有用的主要时间是在处理一个外部库(来自另一种语言)时,该库的类/etc恰好是一个C#关键字,但我承认我在现实中从来没有遇到过这个问题。它有助于C#允许您在重写/实现接口时重命名方法参数名称,从而避免一组常见的情况

另一个(可以说是懒惰的)用途是在代码生成中;如果总是在字段/变量/etc前面加上@theName,那么就不必担心特殊情况。就我个人而言,我只是简单地对照C#关键字/上下文关键字列表进行交叉检查,并添加下划线之类的内容


@符号的另一个用途(逐字字符串文字)是@“更有用的”。

我只在字符串中使用过它,也见过它,比如:

string name=@"some funny name";

我不知道这件事,但根据你说的,我会避免的

我唯一一次在C#中使用@是用于预格式化字符串

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

我已经在asp.NETMVC视图中使用过它,您正在使用HtmlHelper定义css类

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

我认为保留关键字作为变量名是个坏主意。IMHO会降低代码的可读性。虽然在某些情况下,它可能是有用的。例如,在ASP.NET MVC视图中,您可以编写:

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

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

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

您可以安全地避免任何造成混乱的事情。:-)

我唯一使用@的地方是字符串

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


@“c:\Docs\Source\a.txt”//而不是像其他人所指出的那样“c:\\Docs\\Source\\a.txt”

——引用字符串非常有用。以下是一些例子:

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

我想你的意思是反斜杠,鉴于你已经定义了“this”,你不认为代码实际上会引起更多的混乱吗?我更喜欢使用像“this object o”这样的命名约定,就像人们定义“i”作为int的变量名一样。对于(int i=0;i>…我认为这不会引起任何混淆。请记住,在定义扩展方法时,其中一个参数相当于“this”在一个普通的方法中。我认为将其命名为@this强调了这一事实,尤其是在浏览代码时。更好的做法是给出一个实际上有意义的参数名。:)鉴于这是C#的一个相当模糊的特性,我认为这会造成混乱。通过写“_this”更好地传达参数在普通方法中等同于“this”,这是一个普通的名称,而“@”是一个元字符,会导致抓头、搜索和浪费时间。谢谢Marc!这真的很有用。“\\is\\VERY\\Usage”@“don\you\think?”我遇到的@I的一个用例是在ASP.NET MVC中,当您需要传递一个匿名类型,其属性名为C#关键字,如
Html.Action(…,new{…,@class=“Test”})@Mehrdad:检查David Liddle的答案。@Fredrick:哇!我没看到。多么相似啊!我认为当字符串包含\时,它更有用,因此您不需要转义它。我倾向于一直使用它。比转义角色容易得多。