Frage
Ich verwende StreamWriter auf C# WinForms
Ich muss Informationen an den "Schriftsteller" schreiben, wie Sie sehen können.
Mache ich etwas falsch, da das Feld "Schriftsteller" Syntaxfehler hat?
Ich erhalte eine Nachricht mit der Aufschrift:
"'Writer' ist ein 'Feld', wird aber wie ein 'Typ' verwendet."
Irgendwelche Ideen bitte? Mein Code ist unten
class Booking
{
//what other details do you need to save at the end?...
public Show bookedShow { get; private set; }
public Seat selectedSeat { get; private set; }
public Show selectedShow { get; private set; }
public Seat finalPrice { get; private set; } //hasnt been defined yet, but this would be the amount of seats selected * the Price
//i will also need customer details which are:
public dateAndTime dateTime { get; private set; }
public Customer custName { get; private set; }
public Customer custAddress { get; private set; }
public Customer custTelephone { get; private set; }
System.IO.StreamWriter writer = new System.IO.StreamWriter(@"C:\BookingInfo.txt"); //open the file for writing.
writer.Write(dateTime.ToString()); //write the current date to the file. change this with your date or something.
writer.write(bookedShow.ToString());
writer.write(selectedShow.ToString());
writer.write(selectedSeat.ToString());
writer.write(finalPrice.ToString());
writer.write(custName.ToString());
writer.write(custAddress.ToString());
writer.write(custTelephone.ToString());
writer.Close();
}
Lösung
Sie können keine Aussagen in einem Feld haben, die sich nicht in einer Methode befinden (Konstruktor oder andere).
class Booking
{
//what other details do you need to save at the end?...
public Show bookedShow { get; private set; }
public Seat selectedSeat { get; private set; }
public Show selectedShow { get; private set; }
public Seat finalPrice { get; private set; } //hasnt been defined yet, but this would be the amount of seats selected * the Price
//i will also need customer details which are:
public dateAndTime dateTime { get; private set; }
public Customer custName { get; private set; }
public Customer custAddress { get; private set; }
public Customer custTelephone { get; private set; }
public void MyMethod()
{
System.IO.StreamWriter writer = new System.IO.StreamWriter(@"C:\BookingInfo.txt"); //open the file for writing.
writer.Write(dateTime.ToString()); //write the current date to the file. change this with your date or something.
writer.Write(bookedShow.ToString());
writer.Write(selectedShow.ToString());
writer.Write(selectedSeat.ToString());
writer.Write(finalPrice.ToString());
writer.Write(custName.ToString());
writer.Write(custAddress.ToString());
writer.Write(custTelephone.ToString());
writer.Close();
}
}
Sie sollten auch darauf achten, das richtige Gehäuse zu verwenden - writer.write
existiert nicht, wohingegen writer.Write
tut.
In meinem Beispiel habe ich erklärt writer
als lokale Variable der MyMethod
Methode.
Lesen Sie über C# Fields hier.
Andere Tipps
Wenn Sie möchten, dass dies ausgeführt wird, wenn die Klasse "erstellt" ist, verwenden Sie den Konstruktor:
public Booking()
{
using (System.IO.StreamWriter writer = new System.IO.StreamWriter(@"C:\BookingInfo.txt")) //open the file for writing.
{
writer.Write(dateTime.ToString()); //write the current date to the file. change this with your date or something.
writer.Write(bookedShow.ToString());
writer.Write(selectedShow.ToString());
writer.Write(selectedSeat.ToString());
writer.Write(finalPrice.ToString());
writer.Write(custName.ToString());
writer.Write(custAddress.ToString());
writer.Write(custTelephone.ToString());
}
}
Verwenden Sie auch die using
Aussage, um den Strom ordnungsgemäß entsorgt zu haben.
Bearbeiten: Sofern Sie keine besondere Verlangen nach Stream haben, können Sie die statische WriteAlltext -Methode der Dateiklasse verwenden:
public Booking()
{
File.WriteAllText(@"C:\BookingInfo.txt", string.Concat(dateTime, bookedShow, selectedShow, selectedSeat, finalPrice, custName, custAddress, custTelephone));
}
Auf diese Weise müssen Sie sich keine Sorgen machen, dass Sie das Schließen/Entsorgen und auch nicht anrufen müssen ToString()
Methode jeder Klasse, wie sie automatisch durch die Verwendung der durchgeführt wird Concat
.
Zuerst haben Sie den Code, der zu keiner Methode gehört, wie Oded antwortete.
Zweitens dein Write()
ist richtig, aber write()
(Kleinbuchstaben erster Buchstabe) ist nicht.