2016-04-04 9 views
1

Ich schreibe ein Programm in C# mit Windows Forms. Ich erklärte myPoint als ein öffentliches Datenmitglied von myForm. Ich erklärte foo als eine private Methode von myForm(in der Tat ist es ein Click-Ereignis), innerhalb dieser Methode muss ich so etwas wie schreiben:Wie lösche ich den Wert einer Point-Struktur?

if (myPoint.IsEmpty) 
    myPoint = new Point(//position); 
else 
{ 
    //operation involving myPoint 
    myPoint = null; //WHICH RETURNS THE ERROR 
} 

ich den Fehler: ‚Punkt‘ ist ein nicht Nullable Datentyp

Ich lese etwas Material über dynamische Speicherverwaltung, aber ich finde nichts über diesen Fall bisher zu finden. Das einzige, was mir einfällt, ist, die Point-Struktur durch eine benutzerdefinierte zu ersetzen, die nicht ideal ist. Irgendwelche Ideen?

+1

'Point' ist eine Struktur, die ein Werttyp ist. Sie können Werttypen nicht auf null setzen –

+0

Ich fand eine sehr klare Antwort hier: https://social.msdn.microsoft.com/Forums/vstudio/en-US/340786b7-730f-4f06-980f-84196c6e9533/ how-do-you-klar-a-struct-leer-a-struct-? forum = csharpgeneral – maja

Antwort

5

Point ist eine Struktur, und somit hat es immer einen Wert. Sie könnten entscheiden Point.Empty, oder verwenden Sie die Nullable Type zuweisen:

Point? p = null; 
1

Wie Patrick darauf hingewiesen, System.Drawing.Point ist ein struct und wegen dieser immer einen Wert hat, oder besser gesagt, es ist ein Wert von Definition.

Es ist nicht wirklich klar, was Sie erreichen wollen, aber da Sie testen Ihre myPoint wenn es IsEmpty Sie Ihre myPointVariable-Point.Empty einstellen:

myPoint = Point.Empty; 

Or (seit Point ist für einige seltsamen Grund ein wandelbar struct) können Sie die Eigenschaften Ihrer Variable auf Null setzen:

myPoint.X = 0; 
myPoint.Y = 0; 

Oder verwenden Sie eine nullbare Point (Point? myPoint = null;) wie Patrick vorgeschlagen.

Die beste Lösung für Sie hängt davon ab, was Sie erreichen möchten.

Verwandte Themen