C# Programming

C#における堅牢な文字列から整数への変換

Spread the love

C#プログラミングにおいて、文字列を整数に変換することは基本的なタスクです。この記事では、様々なシナリオと潜在的なエラーの処理についてベストプラクティスを重視し、最も効率的で堅牢な方法を探ります。

目次

堅牢なTryParse()メソッド

TryParse()メソッド(例:Int32.TryParse()Int64.TryParse()Int16.TryParse())は、一般的にC#における文字列から整数への変換で推奨されるアプローチです。例外を回避できるという点で、Parse()メソッドよりも大きな利点があります。代わりに、成功または失敗を示すブール値を返し、解析された整数をoutパラメータを介して返します。

このアプローチは、try-catchブロックの必要性を排除することで、効率性とコードの可読性を向上させます。TryParse()はオーバーフロー例外も適切に処理し、例外をスローする代わりにfalseを返します。


string strNumber = "12345";
int number;
bool success = Int32.TryParse(strNumber, out number);

if (success)
{
    Console.WriteLine("整数の値は: " + number);
}
else
{
    Console.WriteLine("無効な入力です。文字列は有効な整数ではありません。");
}

Parse()メソッド:シンプルだが危険性あり

Parse()メソッド(例:Int32.Parse()Int64.Parse()Int16.Parse())は、文字列を整数に変換するより簡潔な方法を提供しますが、大きな欠点があります。入力文字列が有効な整数の表現ではない場合、例外(FormatException)をスローします。そのため、try-catchブロックを使用する必要があり、複雑さと潜在的なパフォーマンスのオーバーヘッドが増加します。


string strNumber = "12345";
int number;

try
{
    number = Int32.Parse(strNumber);
    Console.WriteLine("整数の値は: " + number);
}
catch (FormatException)
{
    Console.WriteLine("無効な入力です。文字列は有効な整数ではありません。");
}

構文はシンプルですが、未処理の例外のリスクが高いため、TryParse()の方が安全で、一般的に優れた代替手段となります。

Convert.ToInt*()メソッド:検討すべき代替手段

Convertクラスは、Convert.ToInt32()Convert.ToInt64()Convert.ToInt16()などのメソッドを提供します。機能的にはParse()と似ていますが、失敗した場合も例外をスローします。空白文字やエッジケースの処理に微妙な違いがある場合がありますが、例外に対する脆弱性は同じため、TryParse()の方が堅牢な選択肢となります。


string strNumber = "12345";
int number;

try
{
    number = Convert.ToInt32(strNumber);
    Console.WriteLine("整数の値は: " + number);
}
catch (FormatException)
{
    Console.WriteLine("無効な入力です。文字列は有効な整数ではありません。");
}

ニーズに合ったメソッドの選択

ほとんどのシナリオでは、TryParse()が推奨されるアプローチです。例外処理の安全性と効率性から、優れた選択肢となります。例外をコード内で直接処理し、潜在的なパフォーマンスへの影響を理解している場合にのみ、Parse()またはConvert.ToInt*()を使用してください。入力値の予想される範囲に基づいて、常に適切な整数型(Int16Int32Int64)を選択してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です