C#调用核心函数中的不同函数

时间:2016-01-07 17:17:44

标签: c#

在C#中,如何仅将GetData1()GetData2()简化为一行功能? 请参阅GetData1GetData2中的评论,最初我在每个函数中有两行写3行,但希望使用GetDataCore来简化它。

    public IEnumerable<int> GetDataCore(function passInFunction)
    {
        // many other steps
        foreach (var sensor in sensors)
        {
            yield return sensor.passInFunction();
        }
    }

    public IEnumerable<int> GetData1()
    {
        // many other steps
        // TODO: use something like 
        // return GetDataCore(GetData1);
        foreach (var sensor in sensors)
        {
            yield return sensor.GetData1();
        }
    }

    public IEnumerable<int> GetData2()
    {
        // many other steps
        // TODO: use something like 
        // return GetDataCore(GetData1);
        foreach (var sensor in sensors)
        {
            yield return sensor.GetData2();
        }
    }

1 个答案:

答案 0 :(得分:0)

使用作为委托传递的选择器,无需编写自己的方法来预测序列中的所有项目。 LINQ为您创建了这样一种方法,称为Select

public IEnumerable<int> GetData1() {
    return sensors.Select(sensor => sensor.GetData1());
}

但是,无论如何要回答你的问题,如果functionFunc<Sensor, int>,那么你可以传入一个带传感器并将其转换为整数的方法,你可以在每个你的GetDataX方法,最有可能使用lambada,如上所示。