2012-12-03 147 views
9

我已經查閱了一些msdn文章,這些文章討論了幾個月前堆棧溢出時的c#編碼約定和命名指南(C# Coding ConventionsNaming Guidelines)以及similar questionc#爲具有相同數據但不同類型的變量命名約定

我不知道如何處理同一時間範圍內的兩個變量,這些變量在不同類型中包含[概念上]相同的數據。

一個有助於說明問題的例子是一個標識符,它最初作爲一個字符串保存,然後被轉換/解析爲一個整數。

我已經想出了3種可能的行動方案,我確信我錯過了可能的選擇。

COA#1:

int iRecordId; 
string sRecordId; 

當變量中的一個或兩個前綴類型的縮寫。這違反了MS編碼準則,規定不要用匈牙利類型符號前綴參數名稱。

COA#2:

int recordId; 
string recordIdString; 

當變量中的一個或兩個明確規定,名稱中的類型。這看起來很快樂,雖然它不使用匈牙利符號,但它似乎違反了之前COA的精神。

COA#3:

int recordIdForDatabase; 
string recordIdFromUrl; 

其中每個變量是進一步限定通過其中的數據來自,或打算。

建議

我的想法是,我最終想兩個變量,只有類型不同,所以雖然有明確規定沒有前綴類型信息變量的準則,我扶着走向區分使用匈牙利語前綴。由於它與代碼的其餘部分的命名約定形成鮮明對比,似乎它將突出顯示情有可原的情況。這是一個合理的方法嗎?

問題,評論和憤怒的呼聲都歡迎。

回答

6

第一個選項已過時,因爲我們不再使用Hunharian Notation。

第二種選擇並不壞,我看到它在不同的項目中的使用。

但是從我的觀點來看,最後一個選項是更可取的,因爲它顯示了兩個變量之間的語義差異,而不是類型之間的差異。

2

爲什麼要存儲兩次數據?你可以把記錄ID放到一個int中,然後當你想要轉換它時調用ToString()?

通過僅存儲一次數據,您就不會在代碼中出現錯誤。

如果變量各自存儲不同的值,則將其命名爲邏輯。例如,

int socialSecurityID; 
string driversLicenceID; 
+1

是的,我只是重讀我寫的東西。仍然應該保持真實 - 只存儲int或_字符串,而不是兩者。然後根據需要轉換。我會保持int值,因爲ToString()會失敗,但Int32.Parse()很容易失敗。 –

2

這很完美。有私人範圍是這樣的:

int recordId; 
string recordIdString; 

但是,如果這些ID是接口的一部分,考慮不同類的設計。將url標識移動到代表Url的類中,在大多數情況下會導致更好的體系結構。

相關問題