我有下一段代码:
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;
}
我正在为 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 容器甚至反射。
- 常量字符串可帮助您确保没有任何拼写错误(在所有对字符串的引用中)。
- 标点符号的常量字符串没有任何全局语义。使用它们会更具可读性,因为它们是","。如果该常量将来可能会发生变化,则可以考虑在这种情况下使用常量,例如将“,”更改为“。” (有一个常量可以帮助你进行重构,尽管现代工具作为resharper不需要常量或变量就可以做到这一点)。
- 如果您只使用它字符串一次,则不需要将其变为常量。但是请考虑一个常量可以记录并显示在文档中(如 Javadocs)。这对于非平凡的字符串值可能很重要。