【问题标题】:Serialize Composed Func?序列化组合函数?
【发布时间】:2010-09-01 18:08:52
【问题描述】:

这很好用:

    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+&lt;&gt;c__DisplayClass3' in Assembly 'MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.

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

【问题讨论】:

  • 将 Func 序列化到视图状态?对不起,但这只是尖叫糟糕的设计,我不会推荐它。您能否描述您尝试实现的功能,也许有人可以提出更好的方法。

标签: c# serialization delegates function-composition


【解决方案1】:

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

【讨论】:

  • 好答案!我今天遇到了同样的问题,并且能够将其确定为关闭,请参阅我新发布的问题stackoverflow.com/questions/26887460/…。您是否有任何官方参考来确认您在此处所说的内容?到目前为止,我自己还没有找到任何...
猜你喜欢
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 2020-01-14
  • 2019-11-20
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多