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

问题描述 投票:0回答:3

在 .NET 中,有一个普遍接受和广泛采用的命名约定。例如,我发现这篇博客文章非常有用,它详细描述了内部框架代码及其外部API遵循的命名约定。例如

int _myPrivateIntVariable
用于其他代码部分的不同情况(驼峰式情况、帕斯卡式情况)的私有类级变量。根据这个约定,程序级别的变量将是驼峰式大小写,例如
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
}

由于当前循环的

sheep
sheep
集合的命名冲突,这段代码显然无法编译。

那么对于这种情况,有没有最佳实践可以让结果名称看起来不奇怪/丑陋? 一种解决方案是在变量名前添加下划线,但这会与私有类级别成员的约定相冲突。 目前,大多数时候我偶然发现这一点,我都会在 *s*ingular 变量中添加一个“S”,所以对于这个例子来说,它是:

foreach (var sheepS in sheep)
。 还有更好的选择吗?

c# .net vb.net naming-conventions
3个回答
3
投票

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

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

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

我会避免使用匈牙利风格的前缀或后缀(例如

mSheep
表示“多个”或
iSheep
表示“项目”,或
sheepS
表示“单个” - 尤其是最后一个,因为它太容易由于清晰度原因,与
sheeps
混淆。试图发明一种将其复数化的方法(
sheeps
表示复数)只会令人困惑。


0
投票

sheep - 羊对我来说很难读。

我更喜欢 mSheepS,其中 m 代表倍数。使用双 s 看起来有点有趣,但以“马”为例;

int马 内马 int mHorseS

当然最好的方法是

很多马

根据您的代码以及您将使用manyHorses的次数,您可以在之间进行更改,但我强烈推荐manyHorses、manySheeps等


0
投票

在您的代码中,很少有只包含羊的集合,通常有一些上下文,将其添加到集合名称中可能会有所帮助。

取自另一个具有不同复数 tantum(“物种”)的示例。

var survivingSpecies = new List<Species>();
// Figure out which species survived.
foreach (var species in survivingSpecies)
{
    // Do something with the current species.
}

如果没有更多上下文,很难知道可以添加什么前缀。

注意:我认为@p.s.w.g 对“flock”的评论可能适合这种设置。

© www.soinside.com 2019 - 2024. All rights reserved.