序列化组合的function?

这很好用:

Func func1 = s => s + "func"; ViewState["function"] = func1; 

但是,这不是:

  Func func1 = s => s + "func"; Func func2 = s => func1(s); ViewState["function"] = func2; 

它抛出运行时序列化exception: Type 'MyProjectName._Default+c__DisplayClass3' in Assembly 'MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

现在,我可以解决这个问题,但是我想了解为什么会发生这种情况,以便将来除了在序列化之前编写函数之外我别无选择,我会有一个解决方案。

在第二种情况下发生的是涉及到关闭。 在func2使用func1会创建一个闭包来捕获lambda表达式之间的共享状态。 闭包不可序列化。 当你尝试序列化func时,它会尝试序列化目标对象,这是一个闭包,你得到了你的exception。