DateTime の Parse(string s) と TryParse(string s, out datetime) は両方とも、文字の日付と時刻を同等の System.DateTime に変換するために使用されます。それでは、関数のパラメータが異なることを除いて、それらの間に違いはありますか?まずコードを見てみましょう:
string dateTimeStr = ""; DateTime dt = DateTime.Parse(dateTimeStr);
空の 文字列 を実行し、それを日付と時刻の型に変換します。明らかに変換できず、Parse() は例外をスローします: System.FormatException: s 。有効な文字列表現 が含まれていません。ただし、TryParseこの変換メソッドを実行すると、
string dateTimeStr = ""; DateTime dt2; //dt2未经初始化,就被传递给函数TryParse() bool sucflag = DateTime.TryParse(dateTimeStr, out dt2);
この変換では、最初は日付と時刻の最小値が割り当てられ、sucflagはfalseになります。関数の コメント を見てください:
このメソッドが返されると、変換が成功した場合は s に含まれる日付と時刻に相当する System.DateTime 値が含まれ、変換が失敗した場合は System.DateTime が含まれます。最小値。 s 引数がnullであるか、空の文字列 ("") であるか、日付と時刻の有効な文字列表現が含まれていない場合、変換は失敗します。 ※このパラメータは初期化せずに渡されます。この関数は例外をスローしません。
Try-Parse
設計パターン です。 パターン解析を試す。以下は Microsoft の公式説明です: パフォーマンスに非常に敏感な API の場合は、前のセクションで説明した Tester-Doer パターンよりもさらに高速なパターンを使用する必要があります。
このパターンでは、メンバー名を調整する必要があります。定義されたテスト ケースはメンバー セマンティクスの一部です。たとえば、DateTime は、文字列の解析が失敗した場合に例外をスローする Parse メソッドを定義します。また、解析を試みるが、解析が失敗した場合は false を返す、対応する TryParse メソッドも定義します。 out パラメーターを使用して、成功した解析の結果を返します。Try-Parse モードを説明する際、Microsoft は別のモードを提案しました:Tester-Doer
次のコード:
ICollection<int> numbers = 省略获取数据的逻辑 numbers.Add(1);//Add此处不做可写性检查
条件をテストするために使用される
ICollection<int> numbers = 省略获取数据的逻辑if(!numbers.IsReadOnly) //Tester{ numbers.Add(1); //Doer}
。この例では、プロパティ
IsReadOnlyがテスターと呼ばれます。
潜在的にスロー操作を実行するために使用されるメンバー、この例では Add メソッドが doer と呼ばれます。分解後、読み取りを行います。 -only 検出を最初に行うと、Add によってスローされる読み取り専用例外の数が減り、パフォーマンスが向上します。 まとめ Try-Parse PatternとTester-Doerモードは、例外のスローに代わる2つの最適化手法であり、設計パフォーマンスの最適化に役割を果たします。
以上が.NET Framework - Try-Parse と Tester-Doer の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。