Учитывая метод расширения, подобный этому:
Public Sub RehydrateTo(Of T As New)(ByVal input As String, ByRef output As T)
Dim ms As MemoryStream = MsFromString(input)
Dim f As New DataContractSerializer(GetType(T))
Try
output = CType(f.ReadObject(ms), T)
Catch ex As SerializationException
output = New T
Dim ild As ILegacyDeserializer = TryCast(output, ILegacyDeserializer)
If Not ild Is Nothing Then
' ... you get the idea
End If
End Try
End Sub
и тип MyCollection, который наследуется от ObservableCollection (Of V), мы обнаруживаем, что вызов someString.RehydrateTo (instanceOfMyCollection) может завершиться ошибкой в обработчике исключений. Проблема в том, что GetType (T) не всегда оценивается как «MyCollection» - в то время как в обработчике исключений он оценивается как «__Canon».
(Система. _ Canon - это своего рода волшебство CLR, которое означает каноническое создание универсального)
Как мы можем обойти это?