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*()
を使用してください。入力値の予想される範囲に基づいて、常に適切な整数型(Int16
、Int32
、Int64
)を選択してください。