c# - 迭代器变量是否有单数形式与复数形式相同的命名准则?

标签 c# .net vb.net naming-conventions

在 .NET 中,有一个普遍接受和广泛采用的命名约定。例如我发现这个Blogpost非常有用,它详细描述了内部框架代码及其外部 API 遵循的命名约定。例如,int _myPrivateIntVariable 用于其他代码部分的不同情况(驼峰式情况、帕斯卡式情况)的私有(private)类级变量。根据这个约定,程序级别的变量将是驼峰式大小写,例如int myIntVariable

因此,根据此,当我迭代对象集合时,我以复数形式(items)命名该集合,而迭代中的当前变量是根据对象命名的单数形式(item)。

有时,我正在处理的对象中,描述我的对象的名词只有一种用于单数和复数的形式(在处理德语单词时,这种情况在我身上更常见,但我们也可以用英语单词来处理)。

假设我们有以下代码:

var sheep = new List<Sheep>();
// Adding objects to the collection

foreach (var sheep in sheep)
{
    // Do something with the current sheep
}

由于循环的当前 sheepsheep 集合的命名冲突,该代码显然无法编译。

那么对于这种情况,有没有最佳实践可以让结果名称看起来不奇怪/丑陋? 一种解决方案是在变量名前添加下划线,但这会与私有(private)类级别成员的约定相冲突。 目前,在我偶然发现这一点的大多数情况下,我都会在 *s* 单数变量中添加一个“S”,因此对于本例来说,它将是: foreach (varsheepS insheep) 。 还有更好的选择吗?

最佳答案

我想我应该附加一个词来表明它是什么:

var sheepList = new List<Sheep>();
// Adding objects to the collection

foreach (var sheepItem in sheepList)
{
    // Do something with the current sheepItem
}

我会避免Hungarian - 样式前缀或后缀(例如 mSheep 表示“多个”,iSheep 表示“item”,或 sheepS 表示“单个” - 尤其是最后一个一,因为为了清晰起见,它很容易与混淆)。试图发明一种将其复数的方法(sheeps 表示复数)只会令人困惑。

关于c# - 迭代器变量是否有单数形式与复数形式相同的命名准则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497589/

相关文章:

c# - 如何使用超时取消 TaskCompletionSource

c# - 微软是否从 C# 中的数组中删除了 "Dynamic"和 "Static"措辞?

c# - 如何声明值为字符串数组的 DefaultValue 属性?

c# - 如何伪造 SharePoint 列表(我需要 IEnumerable<Microsoft.SharePoint.Client.ListItem>)?

c# - 使用扩展方法重写以下 LINQ 语句的优雅方法是什么?

正则表达式仅匹配货币数字

c# - 如果我使用异步,不应该使用更少的线程数吗?

c# - 从字符串中检索文本的正则表达式

vb.net - 素数检查器慢得令人难以置信

vb.net - 默认表单实例何时创建?