vb.netでは、これはシリアル化可能です。
<Serializable()>
Class FunctionHolder
Private _F As Func(Of Double, Double)
Sub New()
Me._F = Function(d As Double) d * 5#
End Sub
End Class
一方、このシリアル化は失敗します。
<Serializable()>
Class FunctionHolder
Private _F As Func(Of Double, Double)
Sub New()
Dim c = 5#
Me._F = Function(d As Double) d * c
End Sub
End Class
おそらく、ローカル変数を参照するc
ということは、ラムダ式がクロージャを持つことを意味するためです。これについての私の知識は大雑把なので、それが間違っている場合は訂正してください。
したがって、ラムダ式をシリアル化できるようにする場合は、プリミティブリテラルのみを指定するのが最善だと思います。しかし、私のコードでは、ラムダを作成するときに変数を完全に回避することは非常に困難です。ラムダ式でローカルプリミティブ変数を使用する方法はありますが、シリアル化の目的で、式を単にリテラル値として「処理」する方法はありますか?