Wie kann ich feststellen, ob der Wert einer string-variable geändert in C#?
Denen ich zu tun habe unter einen button-Klick (listbox Werte hinzufügen) nur dann, wenn eine bestimmte Zeichenfolge änderungen von seiner vorherigen Wert. Wie verwalte ich diese? Unten ist ein Beispiel von meinem code:
private void button6_Click(object sender, EventArgs e)
{
string x = //some varying value I get from other parts of my program
listBox1.Items.Clear();
listBox1.Items.Add(x + /*other things*/);
}
Kann ich bei Zeiten denselben Wert für string x
vom vorherigen Wert beim Klick button6. In solchen Fällen will ich nicht listBox1 hinzufügen, um das Element (string x). Wie hinzufügen listbox nur, wenn der Wert von string-änderungen? Es gibt keine Möglichkeit zu bestimmen string x
. Es wird Wert, wenn das Programm ausgeführt wird.
Hinweis: das hinzufügen von Werten zu listBox1 jedes einzelne mal, und später löschen Sie die Duplikate nicht in meinem Programm.
- Denken Sie daran, die string-Werte ändern sich nie. Strings sind unveränderlich. Variablen ändern.
- button6? listbox1? Tun Sie sich selbst einen gefallen und geben Sie Ihrem Formular-Steuerelemente sinnvolle Namen. Zukunft werden Sie es zu schätzen wissen.
- ja natürlich haben Sie aussagekräftige Namen in meinem Programm. nicht machen einen großen Unterschied beim posten hier.Es ist nur Beispiel-code, den ich gepostet haben.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie als einer Kopie des alten string-Wert um in ein eigenes Feld, und der einfache Vergleich der neue Wert auf den alten Wert zu sehen, ob Sie übereinstimmen?
Beispiel:
Edit: Wie die anderen Antworten, die suggerieren, es gibt sicherlich auch andere, kompliziertere Lösungen, wie die Kapselung aller Zugriffe auf den string-Wert in einer Eigenschaft, oder wickeln Sie die Zeichenfolge in eine eigene Klasse. Einige dieser alternativen, die das Potenzial haben, "cleaner", mehr Objekt-orientierten Ansätze. Aber Sie sind komplizierter, als einfach zu speichern vorherigen Wert in einem Feld. Es ist bis zu Ihnen, zu entscheiden, ob Sie Ihre spezifischen Anwendungsfall Vorzüge, die komplizierte Lösung oder ein einfacheres ein. Denke über langfristige Wartbarkeit, nicht das, was für Sie einfacher zu implementieren ist jetzt.
Wenn dieser string ist super wichtig und gereicht bekommt um eine Menge, vielleicht sollten Sie wickeln Sie es in eine Klasse. Die Klasse halten können Sie den string-Wert als Eigenschaft, sondern auch verfolgen, wenn Sie sich geändert hat.
dies ist rudimentery natürlich
Ich bin mir nicht sicher, ob ich es komplett verstanden, aber es klingt wie Sie verwenden sollten, eine Eigenschaft String x;
Wenn diese web-Anwendung, speichert Ihre letzten Wert in session-Variablen. Wenn diese windows-Anwendung, speichern Sie es auf eine Klasse, variable oder ein singleton-Klassen und verwenden Sie diesen letzten Wert für den Vergleich mit dem neuen Wert.
Auf die Seite geladen werden, fügen Sie den aktuellen Wert, um viewstate und auf die Schaltfläche klicken Sie auf überprüfen Sie den aktuellen Wert ist gleich dem Wert in der view state. Wenn beide gleich sind, können wir sagen, dass der Wert nicht geändert.
Können Sie den ausführlichen Artikel in diesem link.
Check-Control-Wert geändert wird oder nicht
Zunächst möchte ich Sie bitten, zu überprüfen, die meisten der anderen Antworten. Sie sind mehr abschließen, da Sie die Behandlung globaler Probleme, die der Beobachtung von Veränderungen einer Variablen.
Nun, ich nehme an, Lesen Sie das code-snippet Sie bereitgestellt, die Sie brauchen, um zu verfolgen, wenn ein string geändert wurde durch den Benutzer. Also, in anderen Worten, Sie haben wahrscheinlich eine TextBox oder eine andere Art der Steuerung, durch die der Benutzer kann diesen Wert ändern. Dies ist, wo Sie sollten Ihre Aufmerksamkeit: nur konsumieren das TextChanged-Ereignis.
Wenn jedoch ich mich Irre und Ihr string kommt aus einer anderen Art von externer Quelle, entweder verwenden Sie die wrapper-Klasse vorgeschlagen von @Ryan Bennett oder, wenn Sie verwenden .Net 4 verwenden Sie eine dynamische container, die löst ein PropertyChanged-Ereignis aus, wenn eine Eigenschaft geändert wird.