我已经查阅了一些msdn文章,这些文章解决了c#编码约定和命名准则(C# Coding Conventions和Naming Guidelines)以及几个月内堆栈溢出的similar question背部。
我不确定如何处理同时在范围内的两个变量,这些变量在不同类型中保存[概念上]相同的数据。
有助于说明问题的示例将是最初作为字符串保存的标识符,然后将其转换/解析为整数。
我已经提出了3种可能的行动方案,而且我确信我错过了合理的选择。
COA#1:
int iRecordId;
string sRecordId;
其中一个或两个变量前缀为类型缩写。这违反了MS编码指南,声明不要使用匈牙利类型表示法为参数名称添加前缀。
COA#2:
int recordId;
string recordIdString;
其中一个或两个变量明确说明名称中的类型。这看起来很笨拙,虽然它没有使用匈牙利符号,但它似乎违反了之前COA的精神。
COA#3:
int recordIdForDatabase;
string recordIdFromUrl;
每个变量进一步限定数据来自或正在进行的位置。
提案
我的想法是,我最终想要区分两个仅因类型不同的变量,因此虽然有明确规定不使用类型信息为变量添加前缀的指南,但我倾向于使用匈牙利语前缀。由于它与代码的其余部分中的命名约定形成鲜明对比,因此它似乎突出了减轻情节。这是一种合理的方法吗?
欢迎提出问题,评论和愤怒的呼声。
答案 0 :(得分:9)
第一个选项已经过时,因为我们不再使用Hunharian Notation了。
第二个选项并不错,我在不同的项目中看到了它的用法。
但是从我的观点来看,最后一个选项是可取的,因为它显示了两个变量之间的语义差异,而不是类型的差异。
答案 1 :(得分:2)
为什么要存储两次数据?你可以把记录id放到一个int中,然后在想要转换时调用ToString()吗?
只存储一次数据,就可以减少代码中的错误。
如果每个变量存储不同的值,则按逻辑命名。 E.g,
int socialSecurityID;
string driversLicenceID;
答案 2 :(得分:2)
完全没问题。在私人范围内有类似的东西:
int recordId;
string recordIdString;
但如果这些ID是界面的一部分,请考虑不同的类设计。将url id移动到代表Url的类,在大多数情况下会导致更好的架构。