c#具有相同数据但不同类型的变量的命名约定



我查阅了几篇msdn文章,这些文章涉及c#编码约定和命名准则(c#编码惯例和命名准则),以及几个月前关于堆栈溢出的类似问题。

我不确定如何处理同时在作用域中的两个变量,这两个变量在不同类型中持有[概念上]相同的数据。

一个有助于说明这个问题的例子是一个标识符,它最初被保存为字符串,但后来被强制转换/解析为整数。

我已经想出了3个可能的行动方案,我确信我错过了合理的选择。

COA#1:

int iRecordId;
string sRecordId;

其中一个或两个变量在类型缩写前加前缀。这违反了MS编码准则,该准则规定不要在参数名称前面加匈牙利类型表示法。

COA#2:

int recordId;
string recordIdString;

其中一个或两个变量显式声明名称中的类型。这看起来很笨拙,虽然它没有使用匈牙利符号,但似乎违反了之前COA的精神。

COA#3:

int recordIdForDatabase;
string recordIdFromUrl;

每个变量由数据的来源或去向进一步限定。

建议书

我的想法是,我最终想区分两个只按类型不同的变量,所以虽然有明确规定不使用类型信息作为变量前缀的指导方针,但我倾向于使用匈牙利前缀。由于它与代码其余部分的命名约定形成了鲜明对比,因此它似乎会突出情有可原的情况。这种做法合理吗?

问题、评论和愤怒的呼喊都是受欢迎的。

第一个选项已过时,因为我们不再使用Hunharian符号。

第二个选项还不错,我看到它在不同的项目中使用。

但从我的角度来看,最后一个选项更可取,因为它显示了两个变量之间的语义差异,而不是类型的差异。

为什么要存储两次数据?你能把记录id放入int中,然后在你想转换它时调用ToString()吗?

通过只存储一次数据,您就不那么容易受到代码错误的影响。

如果每个变量存储不同的值,则按逻辑命名。例如

int socialSecurityID;
string driversLicenceID;

完全可以。在私有范围中有这样的东西:

int recordId;
string recordIdString;

但是,如果这些id是接口的一部分,请考虑不同的类设计。在大多数情况下,将url id移动到表示url的类会带来更好的体系结构。

最新更新