2016-04-10 3 views
0

Ich habe den folgenden Code, der nach der Verwendung des telerik Codewandlers erstellt wurde, ein Stück von Legacy-Code in C# zu übersetzen, aber es ist was den FehlerKann nicht mit einer Instanz Referenz nach Codeumwandlung zugegriffen werden

Fehler 473 Mitglied 'System.Xml.XmlWriter.Create (System.IO.Stream, System.Xml.XmlWriterSettings)' kann nicht mit einer Instanzreferenz aufgerufen werden; qualifizieren sie mit einem Typnamen anstelle

public virtual string Serialize() 
{ 
    System.IO.StreamReader streamReader = null; 
    System.IO.MemoryStream memoryStream = null; 
    try 
    { 
     memoryStream = new System.IO.MemoryStream(); 
     System.Xml.XmlWriterSettings xmlWriterSettings = new System.Xml.XmlWriterSettings(); 
     xmlWriterSettings.Indent = false; 
     System.Xml.XmlWriter xmlWriter = xmlWriter.Create(memoryStream, xmlWriterSettings); 
     Serializer.Serialize(xmlWriter, this); 
     memoryStream.Seek(0, System.IO.SeekOrigin.Begin); 
     streamReader = new System.IO.StreamReader(memoryStream); 
     return streamReader.ReadToEnd(); 
    } 
    finally 
    { 
     if ((((streamReader) != null))) 
     { 
      streamReader.Dispose(); 
     } 
     if ((((memoryStream) != null))) 
     { 
      memoryStream.Dispose(); 
     } 
    } 
} 

Der Fehler in der Leitung auftritt:

System.Xml.XmlWriter xmlWriter = xmlWriter.Create(memoryStream, xmlWriterSettings); 

In VB.Net der Code wie folgt dar:

Public Overridable Function Serialize() As String 
    Dim streamReader As System.IO.StreamReader = Nothing 
    Dim memoryStream As System.IO.MemoryStream = Nothing 
    Try 
     memoryStream = New System.IO.MemoryStream() 
     Dim xmlWriterSettings As System.Xml.XmlWriterSettings = New System.Xml.XmlWriterSettings() 
     xmlWriterSettings.Indent = False 
     Dim xmlWriter As System.Xml.XmlWriter = XmlWriter.Create(memoryStream, xmlWriterSettings) 
     Serializer.Serialize(xmlWriter, Me) 
     memoryStream.Seek(0, System.IO.SeekOrigin.Begin) 
     streamReader = New System.IO.StreamReader(memoryStream) 
     Return streamReader.ReadToEnd 
    Finally 
     If (Not (streamReader) Is Nothing) Then 
      streamReader.Dispose() 
     End If 
     If (Not (memoryStream) Is Nothing) Then 
      memoryStream.Dispose() 
     End If 
    End Try 
End Function 

Antwort

2

Das Gehäuse ist nicht korrekt. Versuchen Sie, zu XmlWriter.Create (mit einem X-Wert) zu ändern. Ich bin mir nicht sicher, warum der Konverter das auf dich geändert hat. Es wurde anscheinend nur verwirrt, weil die Variablen- und Typnamen identisch waren.

+0

Danke Steven wirklich sollte habe das geschafft :) – Jay

2

Das scheint irgendwie ungültig in den meisten Sprachen, die ich bisher verwendet habe

type varName = varName.DoSmth(); 

Die Verwirrung des automatischen Konvertierungstools rührt von der Ähnlichkeit des Typs und des Variablennamens her. Sie müssen von XmlWriter

System.Xml.XmlWriter xmlWriter = System.Xml.XmlWriter.Create(memoryStream, xmlWriterSettings); 

P. S Create() als statische Methode aufrufen .: Es ist nie eine gute Idee, Werkzeuge zu verwenden, um Code zu generieren.

+0

Danke für die Erklärung Royal Ich weiß, es ist nicht ein gutes Mittel zur Generierung von Code Ich dachte nur, es wäre praktisch zu verstehen, was passiert, indem es in C# zu konvertieren, wo es für mich viel lesbarer ist – Jay

Verwandte Themen