C# 理解Func委托列表(lambda表达式)

C# 理解Func委托列表(lambda表达式),c#,C#,我开始使用lambda表达式,现在我经常使用它,但只使用简单的表达式:-)。有时,我真的很难理解现有代码库中的lambda表达式。试图理解下面的代码,但仍然无法完全破译:-(。我认为由于使用了Func委托,我无法理解。我知道委托返回某些内容时会使用Func委托。但在这种情况下,没有任何线索 代码段: public class PrintProvider { private readonly IInstructionSheetViews _instructionSheetViews;

我开始使用lambda表达式,现在我经常使用它,但只使用简单的表达式:-)。有时,我真的很难理解现有代码库中的lambda表达式。试图理解下面的代码,但仍然无法完全破译:-(。我认为由于使用了Func委托,我无法理解。我知道委托返回某些内容时会使用Func委托。但在这种情况下,没有任何线索

代码段:

 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);
    }