C#封装 - 将foreach循环转换为线性代码

时间:2016-03-31 11:15:58

标签: c# list foreach encapsulation

我有List<DrivingData> dataList = new List<DrivingData>(),其中

public class DrivingData
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string Age { get; set; }
}

List必须像这样使用:

foreach (var data in dataList)
{
    //Do stuffs with data.Id
    //Do stuffs with data.Name
    //Do stuffs with data.Age
}

但我想要相当于上面的内容,而没有显示foreach循环,如下所示:

public void Do()
{
    //Without foreach, but all statements will be repeated for each data in the List
    Console.WriteLine(data.Id + data.Name + data.Age);
    DoSomethingElse(data.Name);
    DoMoreStuffs(data.Age);
}

将为用户公开此Do()方法。用户只需以线性格式记下语句,每个语句将重复列表中的每个元素。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以在foreach循环的每次迭代中调用Do方法:

public void SomeMethod ()
{
    foreach (var data in dataList)
    {
        Do(data);
    }
}

public void Do (DrivingData data)
{
    Console.WriteLine(data.Id + data.Name + data.Age);
}

这样,您可以将您的逻辑放入Do方法中,而无需关心实际上有多个项目。而另一种方法中的foreach循环将负责为每个项调用Do方法。

答案 1 :(得分:0)

您可以改为使用List<T>.ForEach

public void Do()
{
    var dataList = new List<DrivingData>();

    dataList.ForEach(d => Console.WriteLine(d.Id + d.Name + d.Age));
}