9

这工作正常:

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

但是,这不会:

    Func<string, string> func1 = s => s + "func";
    Func<string, string> func2 = s => func1(s);

    ViewState["function"] = func2;

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

现在,这次我可以解决这个问题,但我想了解为什么会发生这种情况,以便将来如果我别无选择,只能在序列化之前组合函数,我会有一个解决方案。

4

1 回答 1

10

第二种情况发生的是涉及到闭包。使用func1inside offunc2创建一个闭包来捕获 lambda 表达式之间的共享状态。闭包是不可序列化的。当您尝试序列化 func 时,它会尝试序列化作为闭包的目标对象,然后您会得到异常。

于 2010-09-01T18:13:55.767 回答