Mar*_*ano 5 language-agnostic coding-style magic-string
我有下一段代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
我正在为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;
}
Run Code Online (Sandbox Code Playgroud)
即使我可能有"DC"和"DC =",我应该在这些变量的名称中考虑或将它们分成两部分:(.然后我的问题: 我应该尽可能避免使用魔术字符串吗?
更新.
一些结论:
我当然会为“DC”和“objectCategory”等实际名称设置常量,但不会为标点符号设置常量。这样做的目的是确保您没有任何拼写错误等,并且您可以轻松找到使用该魔术字符串的位置的所有参考。标点符号实际上并不是其中的一部分。
需要明确的是,我假设魔术字符串是您必须处理的事情,您无法选择将它们设置为由常量定义的数字。正如对您的问题的评论中一样,如果可能的话,这总是更好的选择。但有时,如果您必须与需要字符串的其他系统进行交互,则必须使用字符串。