我有点跟随“方法应该只做一件事”
我有一个汽车文本文件,如果它甚至包含一个宝马,我想将isValid设置为true,但是当我正在浏览文本文件时,我认为我还会填充两个列表高端型号(M3,M5)等)和较低的模型(335,X3等)。
我知道该方法应该只做一件事,但它也可以填充列表。这就是我所拥有的:
private bool hasBMWegments()
{
foreach (ClassLib.CarSegment carElement in CarSegmentFactory.ContainsCar("BMW"))
{
isValid = true;
if (carElement.Class.IndexOfAny(lowerModels) == 0)
{
lstOlderSegment.Add(carElement.ElementNumber);
}
if (carElementClass.IndexOfAny(upperModels) == 0)
{
lstNewerSegment.Add(carElement.ElementNumber);
}
}
return isValid;
}
我应该创建一个再次执行foreach检查的方法吗?或者我应该在该方法中创建另一个方法(我认为这将是混乱的,并且与方法名称无关)
编辑:抱歉使用框架2.0
答案 0 :(得分:2)
与此相比,我发现代码变得一团糟:
private IEnumerable<ClassLib.CarSegment>
GetModels(IEnumerable<ClassLib.CarSegment> segments, string modelID)
{
return segments.Where(x => x.Class.IndexOfAny(modelID) == 0);
}
// ...
var bmwSegments = CarSegmentFactory.ContainsCar("BMW").ToArray();
bool isValid = bmwSegments.Any();
var olderModelSegments = GetModels(bmwSegments, lowerModels);
var newerModelSegments = GetModels(bmwSegments, upperModels);
这段代码显然是正确的。其他代码会让你在循环中看两次以找出正在发生的事情。
答案 1 :(得分:1)
看起来你正在做的就是在第一次通过isValid
时将foreach
设置为true。所以isValid
真的意味着“至少有一个元素吗?”。
在这种情况下,您不需要迭代两次。您可以使用Any()
进行有效检查:
bool IsValid(IEnumerable<CarSegment> elements)
{
return elements.Any();
}
void PopulateSegments(IEnumerable<CarSegment> elements)
{
foreach(var element in elements)
{
//add to lists
}
}