回答:
Parse
値を解析できない場合は例外をスローし、成功したかどうかを示すをTryParse
返しますbool
。
TryParse
それはtry
/ だけではありませんcatch
-それの要点は、それが高速であるように例外なしで実装されているということです。実際、実装される可能性が最も高いParse
方法は、メソッドが内部的に呼び出しTryParse
、戻りの場合は例外をスローすることfalse
です。
簡単に言えば、Parse
値が有効であると確信している場合に使用します。それ以外の場合はを使用しますTryParse
。
文字列を整数に変換できない場合は、
int.Parse()
例外をスローしますint.TryParse()
falseを返します(ただし、例外はスローされません)文字列から指定されたデータ型への変換が失敗すると、Parseは例外をスローしますが、TryParseは明示的に例外をスローしません。
TryParseは値を返さず、解析が成功したかどうかを示すステータスコードを返します(例外をスローしません)。
記録のために、私は2つのコードをテストしています。それは単に文字列から数値への変換を試み、失敗した場合は数値をゼロに割り当てます。
if (!Int32.TryParse(txt,out tmpint)) {
tmpint = 0;
}
そして:
try {
tmpint = Convert.ToInt32(txt);
} catch (Exception) {
tmpint = 0;
}
C#の場合、try&Catch代替が例外をスローするため、tryparseを使用するのが最良のオプション
A first chance exception of type 'System.FormatException' occurred in mscorlib.dll
それは苦痛で遅く、望ましくないことですが、デバッグの例外がそれで停止するように解決されない限り、コードは停止しません。
私はそれが非常に古い投稿であることを知っていますが、ParseとTryParseの詳細をいくつか共有することを考えました。
DateTimeを文字列に変換する必要があるシナリオがあり、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);
別の変数を宣言して、Out for TryParseとして使用する必要があります。
startDate
し、endDate
としてDateTime.TryParse
常にでそれらを上書きしますDateTime.MinValue
。誤った日付表現を別の値に変換する必要がある場合は、の戻り値を確認し、DateTime.TryParse
それがfalseの場合は、値を明示的に設定してください。
DateTime?
(DateTime nullable)
double.Parse( "-"); double.TryParse( "-"、out parsed);の間に例外を発生させます。は0に解析されるので、TryParseはより複雑な変換を行うと思います。
TryParse
返しますtrue
かfalse
?それが「有効」かどうかを知る方法です。