シリアル化は、FUNCキー作曲しますか?
-
26-09-2019 - |
質問
この作品の罰金ます:
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.
今、私はこのこの時間を回避することができますが、私は、これは、将来的には、私は選択肢がないが、直列化する前に機能を構成する場合、私は解決策を持っていますように起こっている理由を理解したいと思います。
解決
何秒の場合には起こっては閉鎖が関与していることです。 func1
のfunc2
の内部の使用は、ラムダ式との間に捕捉共有状態にクロージャを作成します。クロージャは直列化可能ではありません。とき、あなたは試してみて、それが閉鎖され、ターゲットオブジェクトをシリアル化しようとするFUNCをシリアル化し、あなたの例外を取得します。
所属していません StackOverflow