【发布时间】:2011-03-17 14:20:36
【问题描述】:
我正在尝试确定为什么此类型不可序列化(由 Type.IsSerializable() 测试)
<Serializable()> _
Public MustInherit Class WellKnownInstanceCollectionWithTypedId(Of T As WellKnownInstanceWithTypedId(Of IdT), IdT)
Inherits ReadOnlyCollection(Of T)
Public Sub New(ByVal list As IList(Of T))
MyBase.New(list)
End Sub
Public Function GetById(ByVal id As IdT) As T
Return Me.FirstOrDefault(Function(item) item.Id.Equals(id))
End Function
End Class
我知道这与我的 GetById 函数有关,因为如果我删除它一切都很好。有人可以告诉我需要更改什么才能使这种类型可序列化吗?
更新:
当我改变我的GetById 实现时,一切都很好。显然这与 Linq 有关(如下所示) - 谁能给我更多详细信息说明为什么会这样?
Public Function GetById(ByVal id As IdT) As T
For Each i In Me
If i.Id.Equals(i) Then
Return i
End If
Next
Return Nothing
End Function
【问题讨论】:
-
尝试序列化它,它会抛出更多细节的异常
-
我想确认它不是使用 LINQ (
FirstOrDefault),而是使用闭包(Function访问局部变量,或者在这种情况下是参数)。但是我无法重现您的问题:GetType(WellKnownInstanceCollectionWithTypedId(Of ,)).IsSerializable在 .NET 3.5 中使用您的原始定义为我返回True。
标签: .net vb.net serialization