Heim >Backend-Entwicklung >C#.Net-Tutorial >.NET Framework – Der Unterschied zwischen Try-Parse und Tester-Doer

.NET Framework – Der Unterschied zwischen Try-Parse und Tester-Doer

黄舟
黄舟Original
2017-03-20 11:50:491885Durchsuche

Parse und TryParse

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:

Wenn diese Methode zurückkehrt und die Konvertierung erfolgreich ist, wird ein System.DateTime-Wert eingefügt, der dem in s enthaltenen Datum und der Uhrzeit entspricht ; System.DateTime.MinValue, wenn die Konvertierung fehlschlägt. Die Konvertierung schlägt fehl, wenn das Argument s null

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:

Fü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.

Tester-Doer

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.

Der folgende Code:
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 Eigenschaft
IsReadOnly

, 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn