我有下一段代碼:我應該儘可能避免使用魔術字符串嗎?
internal static string GetNetBiosDomainFromMember(string memberName)
{
int indexOf = memberName.IndexOf("DC=", StringComparison.InvariantCultureIgnoreCase);
indexOf += "DC=".Length;
string domaninName = memberName.Substring(indexOf, memberName.Length - indexOf);
if (domaninName.Contains(","))
{
domaninName = domaninName.Split(new[] { "," }, StringSplitOptions.None)[0];
}
return domaninName;
}
我提出一些parsings爲AD,所以我有一些字符串如 「DC =」, 「objectCategory =」, 「LDAP://」,」, 「,」。「誰誰。 我發現上面的代碼要比下面的代碼更易讀:(你可以找到相對的,讓」我知道)
private const string DcString = "DC=";
private const string Comma = ",";
internal static string GetNetBiosDomainFromMember(string memberName)
{
int indexOf = memberName.IndexOf(DcString, StringComparison.InvariantCultureIgnoreCase);
indexOf += DcString.Length;
string domaninName = memberName.Substring(indexOf, memberName.Length - indexOf);
if (domaninName.Contains(CommaString))
{
domaninName = domaninName.Split(new[] { CommaString }, StringSplitOptions.None)[0];
}
return domaninName;
}
即使我可能有‘DC’和‘DC =’,我想在。這個變量或一分爲二,這些:(然後我的問題的名字: 我應該避免魔術字符串儘可能
修訂
一些結論:。
- 有一些方法可以避免使用字符串,這可能會更好。要實現它可以使用:靜態類,枚舉器,數字常量,IOC容器,甚至反射。
- 常量字符串可幫助您確保沒有任何拼寫錯誤(在所有引用字符串中都有)。
- 標點符號的常量字符串沒有任何全局語義。因爲它們是「,」,所以它們更易於使用。對於這種情況,可以考慮使用常數,如果該常數可能在將來發生變化,如變化「,」,「。」(有一個常量可以幫助你進行重構,儘管現代工具不需要常量或變量就可以做到這一點)。
- 如果你只使用它的字符串,你不需要把它變成一個常量。然而,考慮一個常量可以被記錄並顯示在文檔中(如Javadocs)。這對於非重要的字符串值可能很重要。
我想你可能對[this]感興趣(http://programmers.stackexchange.com/questions/142278/are-nullable-types-preferable-to-magic-numbers)主題。 – Torv
我認爲你瞄準MainMa的答案吧? –
是的,你是對的。哦,我建立了[另一個有趣的話題](http://programmers.stackexchange.com/questions/145738/should-a-string-constant-be-defined-if-its-only-going-to-be-used-once ) 爲你。這個主題不回答這個問題,但他們有趣=) – Torv