If语句的更好的语法

时间:2011-08-16 11:03:35

标签: c# .net if-statement

我有这样一个条件:

if (string.IsNullOrEmpty(filename) || size != "Large" || size != "Medium" || size != "Small")

将来的可能性我必须在size声明中管理更多if

我想知道是否存在一种更易于管理和可读的方式来编写这种情况。

请提供一个真实的例子,感谢你的时间。

8 个答案:

答案 0 :(得分:6)

您可以保留单词的哈希集并检查:

HashSet<string> filterWords = new HashSet<string>();
// Put all words in the hash set


if (filterWords.contains(size))
{
    // Do what ever you need
}

答案 1 :(得分:3)

// you could externalize and manage this list somewhere else 
var sizes = new[] { "Large", "Medium", "Small" }; 

if (string.IsNullOrEmpty(filename) || !sizes.Contains(size))
{
    ...
}

答案 2 :(得分:3)

将尺寸放入某种集合中,并使用“包含”。有关示例,请参阅MSDN:http://msdn.microsoft.com/en-us/library/bb352880.aspx

答案 3 :(得分:1)

选项1:

编写一个返回bool且只包含大小测试的小函数,并在if中使用它。

if (string.IsNullOrEmpty(filename) || GoodSize(size))
{
 //...
}

private bool GoodSize(string size)
{
   return size != "Large" || size != "Medium" || size != "Small";
}

选项2:

创建要测试的尺寸列表并使用Contains

var goodSizes = new[] { "Large", "Medium", "Small" };
if (string.IsNullOrEmpty(filename) || !goodSizes.Contains(size))
{
    //...
}

您可以将两种选项结合起来,以获得更好的清晰度和封装效果。

答案 4 :(得分:1)

如果他们要改变,也许静态列表更好:

private static List<string> Sizes = new List<string> { "large", "medium", "small" };

if (string.IsNullOrEmpty(filename) || Sizes.Contains(size.ToLower()))
{

}

对于更清晰的代码,将大小检查封装到自己的方法中,并在需要时修改该方法:

if (MeetsSizeRequirementsOrIsNull(filename, size))
{        
}

private static bool MeetsSizeRequirementsOrIsNull(string filename, string size)
{
    List<string> sizes = new List<string>() { "..." };

    return string.IsNullOrEmpty(filename) || sizes.Contains(size.ToLower())
}

答案 5 :(得分:1)

如果测试结果有多件事要做,那么将其作为开关/案例写出来可能更具可读性。

否则,如果你有这些值的负载,那么将列表保存在某些字典中可能更好 - 让我们说notHandledSizes。分配“大”=&gt;是的,“中”=&gt;是的,...并且只检查该字典中是否存在size并且为真。

答案 6 :(得分:1)

你所做的事情看起来是最直接的做法。任何修改都只会将其他地方的混乱。如果您不需要在其他任何地方重用此代码,我会保持原样。

答案 7 :(得分:1)

以下换行符使其更具可读性。

   if (string.IsNullOrEmpty(filename) || 
    size != "Large" || 
    size != "Medium" || 
    size != "Small")

设计提示

如果许多对象涉及long if条件,那么编写在这些类中返回true / false的小属性/方法是很好的。

if (string.IsNullOrEmpty(filename) || object.IsProperSize)

有时枚举标志属性也有助于此类情况。请查看here以获得更好的解释。