Parse v。TryParse
質問
Parse()とTryParse()の違いは何ですか?
int number = int.Parse(textBoxNumber.Text);
// The Try-Parse Method
int.TryParse(textBoxNumber.Text, out number);
Try-Catchブロックのようなエラーチェックの形式はありますか?
解決
Parse
は、値を解析できない場合に例外をスローしますが、TryParse
は成功したかどうかを示すbool
を返します。
try
は内部的にcatch
/ false
だけではありません-それの全体的なポイントは、高速であるように例外なしで実装されることです。実際、最も実装される可能性の高い方法は、内部的に<=>メソッドが<=>を呼び出し、それが<=>を返す場合に例外をスローすることです。
一言で言えば、値が有効であることが確実な場合は<=>を使用します。それ以外の場合は<=>を使用します。
他のヒント
文字列を整数に変換できない場合、
-
int.Parse()
は例外をスローします -
int.TryParse()
はfalseを返します(ただし、例外はスローしません)
TryParseメソッドを使用すると、何かが解析可能かどうかをテストできます。無効なintで最初のインスタンスのようにParseを試行すると、TryParseで例外が発生し、解析が成功したかどうかを知らせるブール値が返されます。
脚注として、ほとんどのTryParseメソッドにnullを渡すと、例外がスローされます。
文字列から指定されたデータ型への変換が失敗した場合、Parseは例外をスローしますが、TryParseは明示的に例外をスローしません。
TryParseは値を返さず、解析が成功したかどうかを示すステータスコードを返します(例外をスローしません)。
レコードについては、2つのコードをテストしています:文字列から数値への変換を試み、失敗した場合は数値をゼロに割り当てます。
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
and:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
c#の場合、try <!> amp; Catchの代替が例外をスローするため、tryparseを使用するのが最良のオプションです
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
それは苦痛で遅く、望ましくないことですが、デバッグの例外がそれで停止するように解決されない限り、コードは停止しません。
非常に古い投稿を知っていますが、ParseとTryParseの詳細を少し共有することを考えました。
DateTimeをStringに変換する必要があるシナリオがあり、datevalueがnullまたはstring.emptyの場合、例外が発生していました。これを克服するために、ParseをTryParseに置き換え、デフォルトの日付を取得します。
旧コード:
dTest[i].StartDate = DateTime.Parse(StartDate).ToString("MM/dd/yyyy");
dTest[i].EndDate = DateTime.Parse(EndDate).ToString("MM/dd/yyyy");
新しいコード:
DateTime startDate = default(DateTime);
DateTime endDate=default(DateTime);
DateTime.TryParse(dPolicyPaidHistories[i].StartDate, out startDate);
DateTime.TryParse(dPolicyPaidHistories[i].EndDate, out endDate);
別の変数を宣言し、TryParseのOutとして使用する必要があります。
double.Parse(<!> quot;-<!> quot;);例外を発生させますが、 double.TryParse(<!> quot;-<!> quot ;, out parsed); 0に解析します TryParseはより複雑な変換を行うと思います。