Warum funktioniert das nicht?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Der Name deiner Methode ist irreführend bzw. sie tut nicht das, was man erwartet. Wenn der Wert confirm nicht null ist, liefert sie false, statt true.

private bool confirmNotNull(string confirm, string errorName)
{
  // ...
  return confirm == null;
}

Somit ergeben sich diese Ergebnisse im Anwendungsfall:

input (hostname): null
confirmNotNull: hostname == null => true
SaveButtonClick: !(true) == true => false

input (hostname): "abc"
confirmNotNull: hostname == null => false
SaveButtonClick: !(false) == true => true => return

Außerdem gibt deine Methode gegebenenfalls eine MessageBox aus. Es bleibt nicht bei einer Wertprüfung. Da wäre doch so ein Name wie ShowMessageOnError o.ä. bestimmt passender oder eine Trennung (Prüfung innerhalb der Methode, die MessageBox hingegen wird in den if-Rumpf in SaveButtonClick verschoben).

Deine Prüfung setzt des Weiteren voraus, dass die Werte tatsächlich null sind. Ich würde den Fall inkludieren, dass eine Eingabe einfach nur einem leeren String entspricht.

if (!string.IsNullOrEmpty(confirm))
{
  return true;
}

// show message box ...
return false;

Alternativ zu IsNullOrEmpty könnte sich auch IsNullOrWhiteSpace eignen.

Bezüglich der confirmInt-Methode: Auch in ihr passiert mehr, als der Name verspricht (erneut gibt es eine Mischung aus View- und Anwendungslogik). Die Schleife mit dem switch-case ist eine unnötig lange Implementation. Die TryParse-Methode scheint dir wohl nicht bekannt zu sein.

if (int.TryParse(confirm, out var _))
{
  // number is valid
}
else
{
  // number is invalid
}

Zu guter Letzt sind mir noch zwei Stellen in deinem Code aufgefallen, die ich etwas seltsam finde.

1) Die Typangabe object?. Mit dem Fragezeichen markiert man Werttypen als Typen, die auch den Wert null annehmen können. Der Alias object verweist jedoch auf einen Referenztyp (System.Object).

2) Du weist dem Property Text des Query-Typs explizit eine Zahl (queryPort) zu, obwohl ich anhand des Namens erwarten würde, dass das Property Zeichenketten aufnimmt.


JuffMa 
Fragesteller
 10.06.2022, 15:25

Die zwei Punkte zuletzt sind Eigenarten von avalonia die so sein müssen bzw. So gewollte "Feinheiten"

P.s.: hatte nicht gedacht dass noch jemand antwortet deswegen so spät

0
regex9  11.06.2022, 06:50
@JuffMa

Mh, nein, das sind keine Avalonia-Eigenheiten. Der Query-Typ kommt zudem nicht von Avalonia.

0