C#で文字列をnull許容int型(int?)に解析・変換する方法
C#には「null許容型(Nullable型)」という特殊なデータ型が用意されており、通常の値の範囲に加えてnullも代入することができます。
null許容型はC# 2.0で導入された機能で、値型の変数にnullを代入できるようになります。宣言方法は Nullable<T> の形式で、Tには任意の型を指定します。
null許容型の基本的なルール
- null許容型は値型にのみ使用できます。
Valueプロパティは、値がnullの場合にInvalidOperationExceptionをスローします。値が存在すればその値を返します。HasValueプロパティは、変数が値を持っていればtrue、nullならfalseを返します。- null許容型に対して直接使える比較演算子は
==と!=のみです。それ以外の比較を行う場合はNullable静的クラスを利用します。 - 入れ子のnull許容型は許可されていません。例えば
Nullable<Nullable<int>> i;と記述するとコンパイルエラーになります。
実装例1:拡張メソッドで文字列をint?に変換する
文字列をnull許容int型に安全に変換するには、int.TryParse を使った拡張メソッドを作成するのが一般的です。解析に成功すれば整数値を返し、失敗した場合や入力がnullの場合は null を返します。
static class Program{
static void Main(string[] args){
string s = "123";
System.Console.WriteLine(s.ToNullableInt());
Console.ReadLine();
}
static int? ToNullableInt(this string s){
int i;
if (int.TryParse(s, out i)) return i;
return null;
}
}出力結果
123
このように、有効な数値文字列「123」を渡すと、正しく 123 が出力されます。
実装例2:nullが渡された場合の挙動
次に、nullが渡された場合の動作を確認してみましょう。拡張メソッドにnullが渡されても例外は発生せず、何も出力されません。
static class Program{
static void Main(string[] args){
string s = null;
System.Console.WriteLine(s.ToNullableInt());
Console.ReadLine();
}
static int? ToNullableInt(this string s){
int i;
if (int.TryParse(s, out i)) return i;
return null;
}
}出力結果
(何も表示されません)
s がnullのため TryParse は失敗し、メソッドは null を返します。Console.WriteLine にnullが渡された場合は空行が出力されるため、画面上には何も表示されません。
まとめ
文字列をnull許容int型に変換したい場合は、int.TryParse を利用した拡張メソッドを作成するのがシンプルかつ安全なアプローチです。変換の成否をbool値ではなく int? 型の戻り値で表現できるため、呼び出し側のコードもすっきりと書けます。
-
JavaScriptでnullを文字列に変換する方法をわかりやすく解説
JavaScriptでnullを文字列に変換したい場合は、グローバル関数のString()メソッドを使うのが最もシンプルで安全な方法です。String()は引数として渡された値を確実に文字列型へと変換し、nullの場合は文字列「null」を返します。基本的な使い方次のサンプルコードでは、変数に格納されたnullをString()メソッドで文字列に変換し、画面に出力しています。<!DOCTYPE html> <html> <body> <p>nullを文字列に変換する</p&
-
AndroidでJSON文字列を解析(パース)する方法をわかりやすく解説
AndroidでJSON文字列を解析する方法この記事では、AndroidアプリでJSON文字列を解析(パース)する方法を、サンプルコード付きで段階的に解説します。JSONObjectやJSONArrayクラスを使えば、JSON形式のデータから必要な値を簡単に取り出すことができます。手順1:新しいプロジェクトを作成するまず、Android Studioで新しいプロジェクトを作成します。メニューから「File」→「New Project」を選択し、必要な情報を入力してプロジェクトを作成してください。手順2:レイアウトファイル(activity_main.xml)を編集する次に、res/layout