13

我查阅了一些 msdn 文章,这些文章涉及 c# 编码约定和命名指南(C# Coding Conventions and Naming Guidelines)以及几个月前关于堆栈溢出的类似问题。

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

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

我提出了 3 种可能的行动方案,而且我确信我错过了合理的选择。

COA #1:

int iRecordId;
string sRecordId;

其中一个或两个变量作为类型缩写的前缀。这违反了 MS 编码准则,即不使用匈牙利类型符号作为参数名称的前缀。

COA #2:

int recordId;
string recordIdString;

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

认证证书 #3:

int recordIdForDatabase;
string recordIdFromUrl;

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

提议

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

欢迎提出问题、评论和愤怒的呼喊。

4

3 回答 3

9

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

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

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

于 2012-12-03T19:12:11.040 回答
3

为什么要存储两次数据?你能把记录id变成一个int,然后在你想转换它的时候调用ToString()吗?

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

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

int socialSecurityID;
string driversLicenceID;
于 2012-12-03T19:22:41.767 回答
2

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

int recordId;
string recordIdString;

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

于 2012-12-03T19:35:10.303 回答