If语句的更好语法

本文关键字:语法 更好 语句 If | 更新日期: 2023-09-27 18:05:37

我有这样一个条件:

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

将来我可能不得不在if语句中管理更多的size

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

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

If语句的更好语法

您可以保留单词的散列集并检查:

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

if (filterWords.contains(size))
{
    // Do what ever you need
}
// you could externalize and manage this list somewhere else 
var sizes = new[] { "Large", "Medium", "Small" }; 
if (string.IsNullOrEmpty(filename) || !sizes.Contains(size))
{
    ...
}

将大小放入某种集合中,并使用"Contains"。有关示例,请参阅MSDN: http://msdn.microsoft.com/en-us/library/bb352880.aspx

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

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())
}

如果测试结果中有不止一件事要做,那么将其写成一个switch/case可能会更容易读。

否则,如果你有很多这样的值,最好将列表保存在某个字典中——比如notHandledSizes。赋值"Large" => true, "Medium" => true,…并检查size是否存在并且在该字典中为真。

选项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))
{
    //...
}

您可以将这两个选项组合起来以获得更好的清晰度和封装。

在换行符下面更容易阅读。

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

设计提示

如果有很多对象涉及到你的长If条件,最好在这些类中编写返回真/假的小属性/方法。

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

有时 Enum Flags属性也有助于这种情况。

你所做的看起来是最直接的方法。任何修改都只是将混乱转移到别处。如果您不需要在其他任何地方重用这些代码,我将保留它的方式。