C#中的命名约定-下划线



我在MVC3 Razor教程中看到了这一点http://www.asp.net

public ActionResult Index() {
    return View(_usrs._usrList);
}

这种用法难道不是大错特错吗?我一直认为[docs]

在C#中,我通常只在定义底层私有公共属性的成员变量。其他私有成员变量不会有下划线。这种用法主要用于然而,随着自动财产的出现,这一做法被搁置一旁。

还是我看到了一种新的命名惯例?非常好奇微软自己的教程中的用法。

p.S.:这篇文章写得不错。只是为了更好的可读性,我倾向于遵循命名约定。

关于C#风格准则的开发,有一篇很好的文章可以在C#编码约定中阅读。

.NET最初的指导原则是永远不要使用下划线,除非它们是私有成员变量的一部分,然后仅作为前缀,例如_customerId。这可能是从MFC继承的,其中"m_"用作成员变量的前缀。

目前的做法是根本不使用下划线。应使用"this."来消除私有成员变量和同名参数之间的歧义。事实上,所有对私有成员的引用都应该以"this"为前缀。

唯一经常使用下划线的地方似乎是在单元测试方法中。我不喜欢,但它可能会使方法更可读,例如Throw_If_Customer_Is_Null(){...}

此处总结了指导方针http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx并包括使用"this"而不是下划线的规定。但我发现在我的代码中加上"this"会使代码变得更加冗长、杂乱和难以阅读。此外,它似乎比下划线更不常见,所以作为一种惯例,"_"似乎更传统。

在C#7中,我们有了下划线的新用法,表示一个"丢弃";变量这在使用TryParse方法时很常见——我们有时需要返回值或输出值,但不是两者都需要。在C#7中,如果使用"_"作为变量名,编译器将优化目标代码,使其永远不会创建变量。如果你不需要输出变量(你只想知道解析是否成功),你可能会有这样的构造:

if (Int32.TryParse(input, out _)) 

或者,如果您不关心解析成功,只关心输出变量,您可以将其分配给_,如下所示:

_ = Guid.TryParse(input, out Guid id);

下划线本身就是一个合法的变量名,因此您可以立即开始使用此模式。早期版本的C#只会创建一个同名的新变量,而不会优化目标代码,但您会向自己和其他开发人员传达,该变量对代码的功能并不重要。

在ASP中。NET MVC 3下划线更常用。例如,您需要使用下划线(如_MyPartialView)来命名所有局部视图
它可以很容易地区分部分视图和应用程序中的视图。

无论如何,在这个例子中,我不喜欢唱下划线,因为没有必要使用它们。这并没有错,因为用下划线列出你的实体是一种很好的做法。但我更愿意在没有它们的情况下写作
所以这两种方式都是正确的,用你感觉更舒服的方式写作。

最新更新