C#

ParseとTryParseで変換できない文字列を使用してみる

更新日:

ParseとTryParse

.NET Frameworkには、文字列を数値など別の型のデータに変換するためのメソッド(Parse、TryParse)があります。
この2つのメソッドは、「文字列をある型のデータに変換する」ことが目的です。
実装方法や動作に多少の違いがあります。
C#のint型の場合(int.Parseint.TryParse)

それぞれ、下記のように宣言されています。

この2つのメソッドは、文字列(string s)の中身が、「int型に変換できない文字列」だったときに動作が大きく異なります。

代表的な「変換できない文字列」として、空文字列("")だった場合で、変換処理を行ってみます。

int.Parseで文字列を数値に変換する

このようなコードを実装しました。

ここで、txtData.Textが空文字列("")だった場合、例外が発生します。

Perseのときの例外

発生する例外は、’FormatException’(入力文字列の形式が正しくありません)というものです。

 

int.Parseで例外処理を追加する

では、int.Parseで例外が発生した場合のための「例外処理」を実装してみます。

こうすれば、変換できない文字列でも例外は表示されませんが、例外そのものは発生しています

 

int.TryParseに置き換えてみる

先ほどのコードを、int.TryParseの呼び出しに置き換えてみました。

この場合、変数 s が空文字列("")でも例外は発生しません。

そして、このときの変数 data の値は0(ゼロ)でした。

ですが、このままではtxtData.Textで入力したものが「0という数値を入力した」のか、「空文字列で変換した結果、0になってしまった」のかの判別ができません。

int.TryParseは戻り値がbool型で、

  • trueの場合、変換に成功した。
  • falseの場合、変換に失敗した。

という識別が可能です。

コードでは、変数'data'をint.TryParseにそのまま渡していました。

これでは、変換に失敗した場合、int.TryParseでの変換前の変数'data'の値が判らなくなります。
(変換に失敗した場合は、元の値に戻す必要があるときに、値を元の値に戻すことができなくなってしまいます)

 

int.TryParseを使った最終的なコード

最終的なコードはこのようになります。

 

結果

int.Parseは、変換元の文字列が「確実にint型に変換できること」を前提にしないと、例外が発生する可能性がある

int.TryParseは、変換に失敗した場合の処理を実装しておく必要がある。

ということになります。

-C#

Copyright© プログラミングテクニック集キヤミー , 2020 All Rights Reserved.