Heim >Backend-Entwicklung >C#.Net-Tutorial >.NET Framework – Der Unterschied zwischen Try-Parse und Tester-Doer
In DateTime werden Parse(string s) und TryParse(string s, out datetime) beide zum Konvertieren von Zeichendatum und -zeit verwendet Konvertiert in das entsprechende System.DateTime. Gibt es also einen Unterschied zwischen ihnen, außer dass die Parameter der -Funktion unterschiedlich sind? Schauen wir uns zuerst den Code an:
string dateTimeStr = ""; DateTime dt = DateTime.Parse(dateTimeStr);
Führen Sie die leere -Zeichenfolge aus, um sie in den Datums- und Uhrzeittyp umzuwandeln. Offensichtlich kann sie nicht konvertiert werden, und Parse() löst eine aus Ausnahme: System.FormatException: s enthält keine gültige Zeichenfolgendarstellung von Datum und Uhrzeit . Wenn Sie jedoch die TryParse-Konvertierungsmethode ausführen:
string dateTimeStr = ""; DateTime dt2; //dt2未经初始化,就被传递给函数TryParse() bool sucflag = DateTime.TryParse(dateTimeStr, out dt2);
Die -Konvertierung löst nicht zuerst eine Ausnahme aus und dt2 wird der Mindestwert des Datums zugewiesen und Zeit. , sucflag ist falsch. Schauen Sie sich den Kommentar
für die Funktion an:ist, eine leere Zeichenfolge ("") ist oder keine gültige Zeichenfolgendarstellung von Datum und Uhrzeit enthält. *Dieser Parameter wird ohne Initialisierung übergeben. Diese Funktion löst keine Ausnahmen aus.Try-Parse
Nachdem wir ihre Unterschiede gesehen haben, haben von parse() ausgelöste Ausnahmen zwangsläufig Auswirkungen auf die Leistung. Dies ist ein Entwurfsmuster, das abnormale Leistung optimiert, wird Try-Parse-Muster
genannt. Das Folgende ist die offizielle Erklärung von Microsoft:Tester-DoerFür extrem leistungsempfindliche APIs sollte ein noch schnelleres Muster als das im vorherigen Abschnitt beschriebene Tester-Doer-Muster verwendet werden. Das Muster erfordert eine Anpassung der Mitgliedsname, um einen genau definierten Testfall zu einem Teil der Mitgliedssemantik zu machen.
DateTime definiert beispielsweise eine Parse-Methode, die eine Ausnahme auslöst, wenn das Parsen einer Zeichenfolge fehlschlägt. Außerdem wird eine entsprechende TryParse-Methode definiert, die dies versucht parse, gibt jedoch false zurück, wenn das Parsen nicht erfolgreich ist, und gibt das Ergebnis eines erfolgreichen Parsens mithilfe eines Out-Parameters zurück.
Bei der Erläuterung des Try-Parse-Modus schlug Microsoft vor Ein anderer Modus: Tester-Macher-Modus
, was ist der Tester-Macher-Modus? Das Schreiben von Ausnahmen in Funktionen verringert die Leistung. Microsoft hat diesen Modus bereitgestellt, um die Nebenwirkungen von Ausnahmen zu reduzieren.
ICollection<int> numbers = 省略获取数据的逻辑 numbers.Add(1);//Add此处不做可写性检查Der obige Fehler: Wenn die Sammlung schreibgeschützt ist, löst die Add-Methode eine Ausnahme aus. Beim Aufruf dieser Methode werden häufig Ausnahmen ausgelöst, die sich auf die Systemleistung auswirken. Um diesen Designfehler zu vermeiden, hat Microsoft Folgendes vorgeschlagen: Manchmal kann die Leistung eines ausnahmeauslösenden Mitglieds verbessert werden, indem das Mitglied in zwei Teile geteilt wird:
ICollection<int> numbers = 省略获取数据的逻辑if(!numbers.IsReadOnly) //Tester{ numbers.Add(1); //Doer}Das Mitglied war früher
Eine Bedingung testen
, in unserem Beispiel die EigenschaftIsReadOnly, wird als Tester bezeichnet. Das Mitglied, das zum Ausführen einer potenziell auslösenden Operation verwendet wird, ist in unserem Beispiel die Add-Methode wird beispielsweise als „Macher“ bezeichnet. Dadurch wird die Anzahl der von Add ausgelösten schreibgeschützten Ausnahmen reduziert und die Leistung verbessert. Zusammenfassung Try-Parse Pattern und Tester-Doer-Modus sind zwei Optimierungsmethoden, die das Auslösen von Ausnahmen ersetzen und eine Rolle bei der Optimierung der Designleistung spielen.
Das obige ist der detaillierte Inhalt von.NET Framework – Der Unterschied zwischen Try-Parse und Tester-Doer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!