D是一个字典,其条目值为Type T
我正在尝试做的是在下面有一个类似“Serializer”的委托,我可以在T的实例上调用,例如下面的“Entry.Value”。
请参阅下面的“返回条目...”一行,我的一厢情愿。
这可能吗?
如果是这样,这是个坏主意吗?
Public Delegate Function Serializer(Of T)() As Byte()
Function SerializeDictionary_String_Object(Of T)(ByRef D As Dictionary(Of String, T), ByVal ObjSerializer As Serializer(Of T)) As Byte()
for each Entry in D
return Entry.Value.ObjSerializer()
exit for
next
End Function
答案 0 :(得分:2)
在您的Serializer委托中,您没有在任何地方使用T.你应该这样做:
Public Delegate Function Serializer(Of T)(Byval obj As T) As Byte()
或者更好的是,只需使用内置的Func委托。
Function SerializeDictionary_String_Object(Of T)(ByRef D As Dictionary(Of String, T), ByVal ObjSerializer As Func(Of T, Byte()) As Byte()
然后通过执行以下操作来调用它:
ObjSerializer(Entry.Value)
我在VB非常生疏,所以如果我错过了下划线或其他什么,我很抱歉。 :)
答案 1 :(得分:1)
也许像那样的扩展方法?
Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary
Imports System.Runtime.CompilerServices
Public Module ModuleTupExtension
<Extension()> _
Public Function DeepClone(Of T)(ByVal a As T) As T
Using stream As New MemoryStream()
Dim formatter As New BinaryFormatter()
formatter.Serialize(stream, a)
stream.Position = 0
Return DirectCast(formatter.Deserialize(stream), T)
End Using
End Function
<Extension()> _
Public Function toSerializedByteArray(Of T)(ByVal a As T) As Byte()
Using stream As New MemoryStream()
Dim formatter As New BinaryFormatter()
formatter.Serialize(stream, a)
stream.Position = 0
Return stream.ToArray()
End Using
End Function
End Module
我离开了深层克隆,因为我是从那个那里做的。 仅适用于标记为&lt;可序列化&gt;虽然。
另外,我没有在真正的大对象或递归对象上尝试过它。
干杯!