Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代码结构,一个方法应该只做一件事_C#_Structure - Fatal编程技术网

C# 代码结构,一个方法应该只做一件事

C# 代码结构,一个方法应该只做一件事,c#,structure,C#,Structure,我有点遵循“一种方法只能做一件事” 我有一个汽车文本文件,如果它包含一辆BMW,我想将其设置为true,但是当我查看文本文件时,我想我也会填充两个列表高端车型(M3、M5等)和低端车型(335、X3等) 我知道该方法应该只做一件事,但它似乎也很方便地填充列表。以下是我所拥有的: private bool hasBMWegments() { foreach (ClassLib.CarSegment carElement in CarSegmentFactory.ContainsCar("BM

我有点遵循“一种方法只能做一件事”

我有一个汽车文本文件,如果它包含一辆BMW,我想将其设置为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检查的方法?或者我应该在该方法中创建另一个方法(我认为这会很混乱,并且与方法名称无关)


编辑:很抱歉使用framework 2.0

看起来您所做的只是在第一次通过
foreach
时将
isValid
设置为true。所以所有的
isValid
真正的意思是“至少有一个元素吗?”

在这种情况下,您不需要迭代两次。您可以使用执行有效检查:

bool IsValid(IEnumerable<CarSegment> elements)
{
    return elements.Any();
}

void PopulateSegments(IEnumerable<CarSegment> elements)
{
    foreach(var element in elements)
    {
        //add to lists
    }
}
bool是有效的(IEnumerable元素)
{
返回元素。Any();
}
空心填充段(IEnumerable元素)
{
foreach(元素中的var元素)
{
//添加到列表
}
}

看起来您所做的只是在第一次通过
foreach
时将
isValid
设置为true。所以所有的
isValid
真正的意思是“至少有一个元素吗?”

在这种情况下,您不需要迭代两次。您可以使用执行有效检查:

bool IsValid(IEnumerable<CarSegment> elements)
{
    return elements.Any();
}

void PopulateSegments(IEnumerable<CarSegment> elements)
{
    foreach(var element in elements)
    {
        //add to lists
    }
}
bool是有效的(IEnumerable元素)
{
返回元素。Any();
}
空心填充段(IEnumerable元素)
{
foreach(元素中的var元素)
{
//添加到列表
}
}

与此相比,我发现该代码非常混乱:

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);
私有IEnumerable
GetModels(IEnumerable段,字符串modelID)
{
返回段,其中(x=>x.Class.IndexOfAny(modelID)==0);
}
// ...
var bmwSegments=CarSegmentFactory.ContainsCar(“宝马”).ToArray();
bool isValid=bmwSegments.Any();
var olderModelSegments=GetModels(bmwSegments,lowerModels);
var newerModelSegments=GetModels(bmwSegments,upperModels);

这段代码乍一看显然是正确的。另一个代码让您仔细查看循环,以了解发生了什么。

与此相比,我发现该代码非常混乱:

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);
私有IEnumerable
GetModels(IEnumerable段,字符串modelID)
{
返回段,其中(x=>x.Class.IndexOfAny(modelID)==0);
}
// ...
var bmwSegments=CarSegmentFactory.ContainsCar(“宝马”).ToArray();
bool isValid=bmwSegments.Any();
var olderModelSegments=GetModels(bmwSegments,lowerModels);
var newerModelSegments=GetModels(bmwSegments,upperModels);

这段代码乍一看显然是正确的。另一个代码让你看两遍循环,看看发生了什么。

一个解析文件的
ParseFile
方法怎么样,然后写类级变量,其中包括列表和一个bool,说明是否有bmw?这是一个很好的方法,从一开始就初始化所有内容。这就是我现在正在做的,我正在尝试设置列表和bool,说明是否有bmw。方法的名称应该指示该方法将执行的操作。如果我调用一个名为
hasBMWegments()
的方法,它最好不要在某个列表中添加值!如果我在两个不同的地方调用该方法会怎么样?啊,是的,我想如果我设置了isValid,我就不必再次调用该方法,因为我可以在任何地方检查isValid或列表(节省一些时间,但我想如果代码更干净,我保存的那些.00001会更好)如何使用
ParseFile
方法来解析文件,并编写类级变量,其中包括列表和说明是否有bmw的bool?这是一种非常好的方法,从一开始就初始化所有内容。这就是我现在正在做的,我正在尝试设置列表和bool,说明是否有bmw。方法的名称应该指示该方法将执行的操作。如果我调用一个名为
hasBMWegments()
的方法,它最好不要在某个列表中添加值!如果我在两个不同的地方调用这个方法呢?啊,是的,我想如果我设置了isValid,我就不必再调用这个方法了,因为我可以在任何地方检查isValid或列表(节省一些时间,但我想如果代码更干净,我保存的那些.00001会更好)isValid意味着至少有一个元素(这是宝马,因为可能有许多其他类型的汽车),这是正确的,即使没有Linq,您也应该能够检查数组的大小是否大于0。isValid表示至少有一个元素(这是宝马,因为可能有许多其他类型的汽车),这是正确的,即使没有Linq,您也应该能够只检查数组的大小是否大于0。这是一个混乱:(试图编写干净的代码,但看起来很混乱。然后我将使用相同的功能编写
GetModels
,但改为使用循环。这是一个混乱:(试图编写干净的代码,但看起来很凌乱。然后我将使用相同的功能编写
GetModels
,但使用循环。