この質問はある程度好みの問題であることは承知しています。これは私が理解できないことではなく、他の人の意見を聞きたいだけであることは認めます。
ブール値と文字列の 2 つの引数を取るメソッドを作成する必要があります。ブール値はある意味では (すぐに明らかになるでしょう) 冗長ですが、メソッドが両方の引数を受け取る必要があり、ブール値が「間違った」値を持つ場合は特定のメッセージ テキストで例外を発生させる必要があるという仕様の一部です。 . bool は、文字列が null または空でないtrue
場合にのみ指定する必要があります。
そこで、同じことを (できれば!) 書くためのいくつかの異なるスタイルを示します。どれが最も読みやすく、優れたコーディング プラクティスに準拠していると思いますか?
// option A: Use two if, repeat throw statement and duplication of message string
public void SomeMethod(bool useName, string name)
{
if (useName && string.IsNullOrEmpty(name))
throw new SomeException("...");
if (!useName && !string.IsNullOrEmpty(name))
throw new SomeException("...");
// rest of method
}
// option B: Long expression but using only && and ||
public void SomeMethod(bool useName, string name)
{
if (useName && string.IsNullOrEmpty(name) || !useName && !string.IsNullOrEmpty(name))
throw new SomeException("...");
// rest of method
}
// option C: With == operator between booleans
public void SomeMethod(bool useName, string name)
{
if (useName == string.IsNullOrEmpty(name))
throw new SomeException("...");
// rest of method
}
// option D1: With XOR operator
public void SomeMethod(bool useName, string name)
{
if (!(useName ^ string.IsNullOrEmpty(name)))
throw new SomeException("...");
// rest of method
}
// option D2: With XOR operator
public void SomeMethod(bool useName, string name)
{
if (useName ^ !string.IsNullOrEmpty(name))
throw new SomeException("...");
// rest of method
}
もちろん、他の可能性を提案することも大歓迎です。メッセージ テキスト"..."
は、「'useName' が true の場合、名前を指定する必要があり、'useName' が false の場合、名前は許可されません」のようなものになります。