C#では、ユーザー入力やファイルから読み込んだ文字列を数値に変換する場面が非常に多くあります。
本記事では、その中でももっともよく使われるParseによる変換に焦点を当て、実務で困らないための使い方や注意点を、サンプルコード付きで詳しく解説します。
C#における文字列から数値への変換の全体像
文字列から数値への主な変換方法

C#で文字列を数値に変換する主な方法は次の3つです。
1つ目はParseメソッドです。
厳格に「正しい形式の文字列のみを受け付け、失敗したら例外を投げる」方法であり、本記事の主役です。
2つ目はTryParseメソッドです。
変換結果をboolで返し、失敗しても例外を出さないため、ユーザー入力のバリデーションなどで多用されます。
3つ目はConvert.ToInt32などConvertクラスのメソッドです。
nullを0にするなどの振る舞いがあり、Parseとは少し性質が異なります。
本記事では、このうち各数値型のParseメソッドの使い方を中心に解説していきます。
Parseメソッドの基本的な位置づけ

C#では、ほとんどの数値型がParseメソッドを持っています。
代表的なものを挙げると次のようになります。
int.Parse(string)long.Parse(string)float.Parse(string)double.Parse(string)decimal.Parse(string)
いずれも「文字列を受け取り、その型の値に変換する」静的メソッドという共通点がありますので、一度基本形を理解してしまえば、他の型にも応用できます。
Parseの基本構文と最もシンプルな使い方
Parseの基本構文
もっとも基本的な書き方は次のとおりです。
// 文字列からintへ変換する最もシンプルな例
string text = "123"; // 数値に変換したい文字列
int value = int.Parse(text); // Parseでintに変換
Console.WriteLine(value); // 123 が出力される
上記のように、対象とする数値型のParseを呼び出し、引数に変換元の文字列を渡すだけで基本的な処理は完了します。
123
よく使う基本的な数値型でのParse例

int.Parseの例
using System;
class Program
{
static void Main()
{
string text = "42"; // 整数を表す文字列
int number = int.Parse(text);// intに変換
Console.WriteLine(number); // 42
}
}
42
double.Parseの例
using System;
using System.Globalization;
class Program
{
static void Main()
{
string text = "3.14"; // 小数点を含む文字列
double pi = double.Parse(text); // doubleに変換
Console.WriteLine(pi); // 3.14
}
}
3.14
このように型名が変わっても基本的な使い方は同じです。
Parse使用時に必ず押さえておきたい注意点
無効な文字列は例外になる
Parseの最大の特徴は「変換に失敗すると例外が発生する」ことです。
例えば、数字以外の文字が混ざっているとFormatExceptionになります。
using System;
class Program
{
static void Main()
{
string text = "123abc"; // 数字以外の文字が含まれている
// これは例外(FormatException)が発生します
int value = int.Parse(text);
Console.WriteLine(value);
}
}
このコードを実行すると、途中でFormatExceptionが発生し、プログラムが異常終了します。
業務アプリケーションでは例外を適切に捕捉するか、TryParseを利用して事前にチェックすることが重要です。
例外の主な種類
Parseで発生しうる主な例外は、次の2つです。
FormatException
文字列の形式が不正な場合(例: “abc”、”123abc”、空文字など)OverflowException
値がその型の範囲を超えている場合(例:int.Parse("999999999999"))
次のサンプルで、Overflowの例を確認します。
using System;
class Program
{
static void Main()
{
string text = "999999999999"; // intの範囲を超える値
// これはOverflowExceptionが発生します
int value = int.Parse(text);
Console.WriteLine(value);
}
}
このようにParseは「必ず成功する前提」で使うメソッドであり、ユーザー入力のように不正値が混ざる可能性がある場合は、後述するTryParseの方が安全です。
Int32.Parse(string)の基本とバリエーション
int.Parseのもっとも基本的なパターン
using System;
class Program
{
static void Main()
{
string text = "100";
int value = int.Parse(text); // "100" → 100
Console.WriteLine($"value = {value}");
}
}
value = 100
整数の文字列を整数型に変換するのがint.Parseの役割です。
トリミングやプラス記号を含む文字列

int.Parseは、次のようなケースは許容します。
using System;
class Program
{
static void Main()
{
string text1 = " 123 "; // 前後に空白
string text2 = "+456"; // 先頭にプラス
string text3 = "-789"; // 先頭にマイナス
int v1 = int.Parse(text1);
int v2 = int.Parse(text2);
int v3 = int.Parse(text3);
Console.WriteLine(v1); // 123
Console.WriteLine(v2); // 456
Console.WriteLine(v3); // -789
}
}
123
456
-789
このように、前後の空白や先頭の符号は問題なく解釈されることを覚えておくと便利です。
NumberStylesとCultureInfoを使った高度なint.Parse
int.Parseには、NumberStylesやCultureInfoを指定できるオーバーロードもあります。
例えば"1,234"のようなカンマ区切りを許可したい場合は、次のように書きます。
using System;
using System.Globalization;
class Program
{
static void Main()
{
string text = "1,234"; // カンマ区切りの数値
// NumberStyles.AllowThousandsを指定してカンマを許可する
int value = int.Parse(
text,
NumberStyles.AllowThousands,
CultureInfo.InvariantCulture
);
Console.WriteLine(value); // 1234
}
}
1234
標準のint.Parse(string)では"1,234"はエラーになるため、会計システムなどでカンマ付き数値を扱う際は、このオーバーロードを使うことが重要です。
double.Parse / decimal.Parse で小数を扱う
double.Parseの基本
using System;
class Program
{
static void Main()
{
string text = "12.34";
double value = double.Parse(text);
Console.WriteLine(value); // 12.34
}
}
12.34
小数点を含む数値はdouble.Parseまたはdecimal.Parseを使って変換します。
decimal.Parseの特徴
decimalは金額や精度が重要な値でよく使われます。
浮動小数点誤差を避けたい場合はdecimal.Parseを利用します。
using System;
class Program
{
static void Main()
{
string priceText = "1234.56";
decimal price = decimal.Parse(priceText);
Console.WriteLine(price); // 1234.56
}
}
1234.56
金額計算など誤差を許容できない場面ではdoubleよりdecimalと覚えておくとよいです。
小数点の記号とカルチャ(CultureInfo)

小数点記号と桁区切り記号はカルチャによって異なります。
日本や英語圏では"1,234.56"ですが、ドイツなどでは"1.234,56"のように逆になります。
この違いはCultureInfoで制御できます。
using System;
using System.Globalization;
class Program
{
static void Main()
{
string usText = "1,234.56";
string deText = "1.234,56";
// 米国カルチャ
var us = new CultureInfo("en-US");
// ドイツカルチャ
var de = new CultureInfo("de-DE");
double usValue = double.Parse(usText, us);
double deValue = double.Parse(deText, de);
Console.WriteLine(usValue); // 1234.56
Console.WriteLine(deValue); // 1234.56
}
}
1234.56
1234.56
国際化対応が必要なアプリケーションでは、カルチャを明示してParseを呼び出すことが非常に重要です。
安全な変換にはTryParseの併用を検討する
ParseとTryParseの違い

ユーザー入力など、常に正しい形式とは限らない文字列を扱う場合はParseだけでは危険です。
そのような場合に便利なのがTryParseです。
int.TryParseのサンプル
using System;
class Program
{
static void Main()
{
Console.Write("数値を入力してください: ");
string input = Console.ReadLine();
// TryParseは変換できたかどうかをboolで返す
bool success = int.TryParse(input, out int value);
if (success)
{
Console.WriteLine($"変換に成功しました: {value}");
}
else
{
Console.WriteLine("数値として認識できませんでした。");
}
}
}
実行例1(入力が”123″の場合):
数値を入力してください: 123
変換に成功しました: 123
実行例2(入力が”abc”の場合):
数値を入力してください: abc
数値として認識できませんでした。
例外を発生させずにバリデーションができるため、実務ではTryParseが使われることが多いです。
ただし、Parseの仕組みを理解しておくと、TryParseも自然に理解できるようになります。
ParseとConvert.ToXxxの違い
Convert.ToInt32との比較
Convert.ToInt32などのメソッドは、内部的にParseを利用していることが多いですが、nullの扱いなどが異なります。
次の表に簡単に違いをまとめます。
| メソッド | nullのとき | 不正な文字列のとき | 備考 |
|---|---|---|---|
int.Parse | ArgumentNullException | FormatException | 変換失敗は例外 |
Convert.ToInt32 | 0 | FormatException | nullを0に変換 |
int.TryParse | false(return) | false(return) | 例外を出さずに結果だけ返す |
「nullの場合は0」という仕様が欲しい場合はConvert.ToInt32を使うと楽なことがありますが、意図しない0が紛れ込むリスクもあるため、仕様として明確に決めてから使うことが大切です。
実務でのおすすめパターン
基本方針

実務では、次のような方針を取ると安全です。
1. 自分で生成した文字列や設定値など「形式が保証されている」場合
→ Parseを使い、形式がおかしければ例外で検知する
2. ユーザー入力や外部からのデータなど「不正値の可能性がある」場合
→ TryParseでバリデーションし、エラー表示や再入力を促す
設定値をParseで読み込む例
using System;
class Program
{
static void Main()
{
// アプリの設定値など、プログラム側で管理する値
string maxRetryText = "3"; // 設定ファイルから読み込んだと想定
// 設定ファイルのフォーマットが壊れていれば例外で気付ける
int maxRetry = int.Parse(maxRetryText);
Console.WriteLine($"最大リトライ回数: {maxRetry}");
}
}
最大リトライ回数: 3
このように「壊れてはいけない情報」については、あえてParseで例外を発生させる設計も有効です。
まとめ
本記事では、C#で文字列から数値へ変換するParseメソッドについて解説しました。
int.Parseやdouble.Parseなど基本的な使い方から、NumberStylesやCultureInfoを使ったカンマ区切り・小数点の扱いまで確認しました。
また、Parseは失敗時に例外を発生させるため、ユーザー入力にはTryParseを併用することが重要であることも紹介しました。
変換の前提条件や入力元の信頼性に応じて、Parse、TryParse、Convertを使い分けることで、堅牢で分かりやすいコードを書くことができます。
