private bool SearchFilter(object sender)
{
CommDGDataSource item = sender as CommDGDataSource;
if (FilterPropertyList.IsErrorFilter)
{
if (!item.Error)
return false;
}
if (FilterPropertyList.IsDestinationFilter)
{
if (!(item.Destination == FilterPropertyList.Destination))
return false;
}
if (FilterPropertyList.IsSourceFilter)
{
if (!(item.Source == FilterPropertyList.Source))
return false;
}
return true;
}
上面的代码运作良好,但我想知道是否有更优雅的方式来编写上述代码。
答案 0 :(得分:4)
通过进行如下的小改动,您可以更具可读性
private bool SearchFilter(object sender)
{
CommDGDataSource item = sender as CommDGDataSource;
if (FilterPropertyList.IsErrorFilter && !item.Error)
return false;
if (FilterPropertyList.IsDestinationFilter && item.Destination != FilterPropertyList.Destination)
return false;
if (FilterPropertyList.IsSourceFilter && item.Source != FilterPropertyList.Source)
return false;
return true;
}
答案 1 :(得分:3)
我不认为弄乱布尔表达式有很多优点,除了我comment中提到的简单修改。如果你最终得到丑陋的代码,那么你的设计就不那么好了。
在这种情况下,您可以通过以下方式重构责任:
像这样的Pseudocode:
foreach (var filter in filters)
if !filter.Filter(item) return false;
return true;
public interface IFilter
{
bool Filter(CommDGDataSource item);
}
public class ErrorFilter : IFilter
{
public bool Filter(CommDGDataSource item)
{
return item.Error;
}
}
public class DestinationFilter : IFilter
{
public string Destination { get; set; }
public bool Filter(CommDGDataSource item)
{
return item.Destination == Destination;
}
}
//etc..