C# 理解Func委托列表(lambda表达式)
我开始使用lambda表达式,现在我经常使用它,但只使用简单的表达式:-)。有时,我真的很难理解现有代码库中的lambda表达式。试图理解下面的代码,但仍然无法完全破译:-(。我认为由于使用了Func委托,我无法理解。我知道委托返回某些内容时会使用Func委托。但在这种情况下,没有任何线索 代码段:C# 理解Func委托列表(lambda表达式),c#,C#,我开始使用lambda表达式,现在我经常使用它,但只使用简单的表达式:-)。有时,我真的很难理解现有代码库中的lambda表达式。试图理解下面的代码,但仍然无法完全破译:-(。我认为由于使用了Func委托,我无法理解。我知道委托返回某些内容时会使用Func委托。但在这种情况下,没有任何线索 代码段: public class PrintProvider { private readonly IInstructionSheetViews _instructionSheetViews;
public class PrintProvider
{
private readonly IInstructionSheetViews _instructionSheetViews;
public PrintProvider(IInstructionSheetViews instructionSheetViews)
{
_instructionSheetViews = instructionSheetViews;
}
public void AddReport()
{
// Some implementation code goes here
var printViews = _instructionSheetViews.PrintViews;
// Some implementation code goes here
}
}
public class InstructionSheetViews : IInstructionSheetViews
{
private readonly IInstructionSheetFactory _factory;
private IEnumerable<IReport> _instructionSheetView;
private List<Func<IInstructionSheetFactory, IReport>> _instructionSheetViewList;
public InstructionSheetViews(IInstructionSheetFactory factory)
{
_factory = factory;
}
public IEnumerable<IReport> PrintViews
{
get
{
if (_instructionSheetView == null)
{
Init();
_instructionSheetView = _instructionSheetViewList.Select(x => x(_factory));
}
return _instructionSheetView;
}
}
private void Init()
{
_instructionSheetViewList = new List<Func<IInstructionSheetFactory, IReport>>();
_instructionSheetViewList.Add(x => x.BuildCommonData());
_instructionSheetViewList.Add(x => x.BuildSpecificData());
}
}
我能猜到的是,它添加了一个返回“IReport”的方法。但是“_instructionSheetViewList”包含一个“Func”列表。因此,理想情况下,它不应该包含一个将输入作为“IInstructionSheetFactory”并返回“IReport”的方法吗
这个语句是如何工作的。基本上是控制流
_instructionSheetViewList.Select(x => x(_factory));
谁能给我解释一下吗
提前谢谢
所以,理想情况下,它不应该包含一个将输入作为“IInstructionSheetFactory”并返回“IReport”的方法吗
确实如此。\u指令sheetviewlist.Add(x=>x.BuildCommonData());
基本上等同于此:
_instructionSheetViewList.Add(anonymousMethod12345);
/*...*/
public static IReport anonymousMethod12345 (IInstructionSheetFactory x)
{
return x.BuildCommonData();
}
相当于-
private IReport GetReport(IInstructionSheetFactory x)
{
return x.BuildCommonData();
}
当你这么做的时候-
_instructionSheetViewList.Select(x => x(_factory));
它实际上调用了一个以Func作为该方法输入参数的方法
哪个inturn以_factory作为输入参数调用Func委托引用的方法
private IReport DoSomething(Func<IInstructionSheetFactory, IReport> x)
{
return x(_factory);
}
private IReport DoSomething(Func x)
{
返回x(_工厂);
}
希望这能有所帮助。Q1:向延迟方法调用添加func委托。Q2:调用延迟方法。就是这样。“它不应该包含一个将输入作为“IInstructionSheetFactory”并返回“IReport”的方法吗?”--是的,这正是
x=>x.BuildCommonData()
的含义。那么,你的问题是什么?“有人能给我解释一下吗?”--你不明白什么?你读了Select()的文档了吗
method?您是否阅读了有关代理及其调用方式的文档?您的问题太模糊,不知道您需要什么答案……因此,这不是一个解释广泛概念的理想论坛,但如果您需要帮助,您需要更具体的问题。
_instructionSheetViewList.Select(x => x(_factory));
private IReport DoSomething(Func<IInstructionSheetFactory, IReport> x)
{
return x(_factory);
}