If语句的更好语法
本文关键字:语法 更好 语句 If | 更新日期: 2023-09-27 18:05:37
我有这样一个条件:
if (string.IsNullOrEmpty(filename) || size != "Large" || size != "Medium" || size != "Small")
将来我可能不得不在if
语句中管理更多的size
。
我想知道是否存在一种更易于管理和可读的方式来写这个条件。
请提供一个真实的例子,感谢您的时间。
您可以保留单词的散列集并检查:
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属性也有助于这种情况。
你所做的看起来是最直接的方法。任何修改都只是将混乱转移到别处。如果您不需要在其他任何地方重用这些代码,我将保留它的方式。