在 .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
}
由于循环的当前 sheep
和 sheep
集合的命名冲突,该代码显然无法编译。
那么对于这种情况,有没有最佳实践可以让结果名称看起来不奇怪/丑陋?
一种解决方案是在变量名前添加下划线,但这会与私有(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/