Ich kann nicht über die tatsächlichen Gründe sagen, aber ich sehe drei mögliche Gründe:
1) Nullable types wurden seit .NET 2.0, während die first TryParse
methods waren bereits rund 1,1 .NET eingeführt.Wenn NULL-Typen eingeführt wurden, war es für eine solche API-Änderung zu spät. und neue Klassen implementieren TryParse
nicht anders, weil das Muster bereits festgelegt wurde.
2) Nicht alle Typen können mit dem Nullable
structure verwendet werden, nur Werttypen können. Es gibt jedoch Methoden, die dem Muster Try*
folgen und Referenztypen zurückgeben müssen. Zum Beispiel kann ein Wörterbuch absolut legitim null
als ein Element enthalten, daher benötigt seine TryGetValue
method eine zusätzliche Möglichkeit auszudrücken, dass ein Schlüssel nicht gefunden wurde.
3) Die Art und Weise die Try*
-Methoden geschrieben werden, ist es möglich, Code wie folgt zu schreiben:
int myValue;
if (int.TryParse("42", out myValue)) {
// do something with myValue
}
// do something else
}
nun vorstellen, wenn TryParse
nur eine int?
zurückgegeben. Sie können entweder der myValue
Variable verfügen und das Ergebnis verlieren:
if (int.TryParse("42").HasValue) {
// do something with ... what? You didn't store the conversion result!
}
// do something else
}
Oder Sie können ein Nullable-Variable hinzufügen:
int? myValue = int.TryParse("42");
if (myValue.HasValue) {
// do something with myValue.Value
}
// do something else
}
Das ist kein Vorteil gegenüber der aktuellen Version mehr vorhanden, und stattdessen es erfordert schreiben myValue.Value
in einigen späteren Instanzen, wo sonst eine einfache value
würde ausreichen würde. Beachten Sie, dass Sie in vielen Fällen nur die Information benötigen, ob der Vorgang für die if
-Anweisung erfolgreich war.
Das wäre eine Frage für das .NET Framework-Entwicklerteam. Die meisten Läden schreiben eine Erweiterungs-Methode 'string', die etwas in der Form von' ToNullableInt' heißt und das gewünschte Verhalten implementiert. Ich wäre nicht überrascht, wenn eine zukünftige Version von C# dies nativ unterstützt. –
Vielleicht, weil andere Sprachen keine so einfache Syntax für Nullables haben. Z.B. In C++/CLI müssen Sie 'Nullable result = int :: TryParse (...)' schreiben. –
Stephan
Welchen Grund haben Sie, um irgendeine zufällige Zeichenkette als 'null' zu behandeln? Die meisten möglichen Verwendungen, die ich bei einer Umwandlung von "string" in "int?" Gesehen habe, sind die Umwandlung einer leeren Zeichenfolge in "null", die Konvertierung einer nicht leeren Zeichenfolge in ein gültiges 'int' und die Ablehnung von zufälligen Fehlern wie' @ ($^V @ Q (% ^% (@ B^N ('.) Dies wäre bereits eine gute Wahl für' int.TryParse', unabhängig von seinem Rückgabetyp. Können Sie ein vernünftiges Szenario angeben, in dem 'TryParse '' T? 'zurückgeben ist eigentlich wünschenswert? – hvd