Étant donnée une méthode d'extension comme ceci:Comment puis-je contourner le problème de type __Canon dans les gestionnaires d'exceptions génériques?
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
et un MaCollection de type qui hérite de ObservableCollection (V), nous constatons que l'appel someString.RehydrateTo (instanceOfMyCollection) peut échouer dans le gestionnaire d'exception. Le problème est que GetType (T) n'évalue pas toujours à "MyCollection" - tandis que dans le gestionnaire d'exception, il évalue à "__Canon".
(System .__ Canon étant une sorte de magie CLR qui signifie une instanciation canonique d'un générique)
Comment pouvons-nous travailler autour de cela?
Je suis un peu cochée que cela a été réduit. Ai-je fait quelque chose de mal ici? –
ne sais pas, mais je vous ai attribué +1 pour le rétablir. Probablement quelqu'un avec le nez hors de la jointure pour une raison ou une autre. J'ai quelqu'un qui vote mes questions/réponses deux fois/trois fois par jour, deux fois par jour sans faute. Ils le font depuis près d'une semaine maintenant et tous les deux jours, les downvotes sont anéanties par SO "abus detector thingy". Agaçant, mais amusant en même temps – Rob