在C#中,如何仅将GetData1()
和GetData2()
简化为一行功能?
请参阅GetData1
和GetData2
中的评论,最初我在每个函数中有两行写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();
}
}
答案 0 :(得分:0)
使用作为委托传递的选择器,无需编写自己的方法来预测序列中的所有项目。 LINQ为您创建了这样一种方法,称为Select
:
public IEnumerable<int> GetData1() {
return sensors.Select(sensor => sensor.GetData1());
}
但是,无论如何要回答你的问题,如果function
是Func<Sensor, int>
,那么你可以传入一个带传感器并将其转换为整数的方法,你可以在每个你的GetDataX
方法,最有可能使用lambada,如上所示。