次のコードがあります。
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=」があるかもしれませんが、この変数の名前を考えるか、これらを2つに分割する必要があります:(。それから私の質問: 魔法の文字列をできるだけ避けるべきですか?
更新。
いくつかの結論:
- 文字列をまったく使用しないようにする方法はいくつかありますが、その方がよい場合があります。それを達成するには、静的クラス、列挙子、数値定数、IOC コンテナー、さらにはリフレクションを使用できます。
- 定数文字列は、タイプミスがないことを確認するのに役立ちます (文字列へのすべての参照で)。
- 句読点の定数文字列には、グローバル セマンティックはありません。これらを","のまま使用すると読みやすくなります。「、」を「。」に変更するなど、その定数が将来変更される可能性がある場合は、この場合に定数を使用することを検討してください。(リシャーパーとしての最新のツールは定数や変数を必要とせずにこれを行いますが、定数を使用するとそのリファクタリングに役立つ場合があります)。
- 文字列を一度だけ使用する場合は、定数にする必要はありません。ただし、定数を文書化して、ドキュメントに (Javadocs として) 表示できることを考慮してください。これは、重要な文字列値にとって重要な場合があります。