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


我已经查阅了一些msdn文章,这些文章涉及c#编码约定和命名指南(C#编码约定 和 命名指南) 以及ASA 类似的问题 从几个月前的堆栈溢出。

我不确定如何处理两个同时在范围内的变量,这些变量在不同类型中保存[概念上]相同的数据。

有助于说明该问题的示例将是最初作为字符串保持的标识符,然后被转换/解析为整数。

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

COA#1:

int iRecordId;
string sRecordId;

其中一个或两个变量前缀为类型缩写。这违反了MS编码指南,声明不要使用匈牙利类型表示法为参数名称添加前缀。

COA#2:

int recordId;
string recordIdString;

其中一个或两个变量明确说明名称中的类型。这看起来很笨拙,虽然它不使用匈牙利表示法,但它似乎违反了之前COA的精神。

COA#3:

int recordIdForDatabase;
string recordIdFromUrl;

每个变量进一步限定数据来自或将来的位置。

提案

我的想法是,我最终想要区分两个仅按类型不同的变量,因此虽然有明确说明不使用类型信息为变量添加前缀的指南,但我倾向于使用匈牙利语前缀。由于它与代码的其余部分中的命名约定形成鲜明对比,因此它似乎会突出显示情有可原的情况。这是一种合理的方法吗?

欢迎提出问题,评论和愤怒的呼声。


12594
2017-12-03 19:07


起源



答案:


第一个选项已经过时,因为我们不再使用Hunharian Notation了。

第二个选项也不错,我在不同的项目中看到了它的用法。

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


8
2017-12-03 19:12





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

通过仅存储一次数据,您可以减少代码中的错误。

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

int socialSecurityID;
string driversLicenceID;

2
2017-12-03 19:22



是的,我只是重读了我写的内容。仍然应该成立 - 只存储int 要么 字符串,而不是两者。然后根据需要进行转换我保留int值,因为ToString()是 很少 会失败,但Int32.Parse()很容易失败。 - Nick Vaccaro


答案:


第一个选项已经过时,因为我们不再使用Hunharian Notation了。

第二个选项也不错,我在不同的项目中看到了它的用法。

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


8
2017-12-03 19:12





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

通过仅存储一次数据,您可以减少代码中的错误。

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

int socialSecurityID;
string driversLicenceID;

2
2017-12-03 19:22



是的,我只是重读了我写的内容。仍然应该成立 - 只存储int 要么 字符串,而不是两者。然后根据需要进行转换我保留int值,因为ToString()是 很少 会失败,但Int32.Parse()很容易失败。 - Nick Vaccaro


这完全没问题。在私人范围内有类似的东西:

int recordId;
string recordIdString;

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


2
2017-12-03 19:35