在 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
大概是因为引用本地 varc
意味着 lambda 表达式现在有一个闭包。我对此的了解是粗略的,所以如果这是错误的,请纠正我。
所以我在想,如果你想让 lambda 表达式可序列化,最好只给它们原始文字。但是我的代码使得在创建 lambda 时很难完全避免变量。有什么方法可以在 lambda 表达式中使用本地原始变量,但是为了序列化的目的,以某种方式让表达式将其“视为”简单的文字值?