我知道这个问题在某种程度上是一个品味问题。我承认这不是我不明白的事情,这只是我想听听别人的意见。
我需要编写一个带有两个参数的方法,一个布尔值和一个字符串。布尔值在某种意义上(很快就会很明显)是多余的,但它是该方法必须接受两个参数的规范的一部分,并且如果布尔值具有“错误”值,则必须引发带有特定消息文本的异常. 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' 为真,则必须给出名称,如果 'useName' 为假,则不允许使用名称”。