Co powoduje „CA2202: Nie wyrzucaj obiektów wiele razy” w tym kodzie i jak mogę go refaktoryzować?
Mam poniższą funkcję, która służy do serializowania obiektu bez dodawania deklaracji XML. Właśnie otworzyłem projekt zawierający go w Visual Studio 2012, a analiza kodu zbliża się do ostrzeżenia „CA2202: Nie usuwaj obiektów wiele razy”.
Teraz w innych przypadkach naprawiłem to ostrzeżenie, usuwając [obiekt]. Zamknij to nie było potrzebne, ale w tym przypadku nie widzę, co należy zmienić ipomoc dla ostrzeżenia podczas gdy dokładność nie jest dokładnie informująca o tym, jak jest spowodowana lub jak to naprawić.
Co dokładnie powoduje wyświetlenie ostrzeżenia i jak mogę go naprawić, aby go uniknąć?
''' <summary>
''' Serialize an object without adding the XML declaration, etc.
''' </summary>
''' <param name="target"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Shared Function SerializeElementToText(Of T As New)(target As T) As String
Dim serializer As New XmlSerializer(GetType(T))
'Need to serialize without namespaces to keep it clean and tidy
Dim emptyNS As New XmlSerializerNamespaces({XmlQualifiedName.Empty})
'Need to remove xml declaration as we will use this as part of a larger xml file
Dim settings As New XmlWriterSettings()
settings.OmitXmlDeclaration = True
settings.NewLineHandling = NewLineHandling.Entitize
settings.Indent = True
settings.IndentChars = (ControlChars.Tab)
Using stream As New StringWriter(), writer As XmlWriter = XmlWriter.Create(stream, settings)
'Serialize the item to the stream using the namespace supplied
serializer.Serialize(writer, target, emptyNS)
'Read the stream and return it as a string
Return stream.ToString
End Using 'Warning jumps to this line
End Function
Próbowałem tego, ale to też nie działa:
Using stream As New StringWriter()
Using writer As XmlWriter = XmlWriter.Create(stream, settings)
serializer.Serialize(writer, target, emptyNS)
Return stream.ToString
End Using
End Using 'Warning jumps to this line instead