C#
なぜ Parse + try/catch が業務系で刺さるのか
出典: C# TryParse の正解 — int.TryParse / DateTime.TryParse / Enum.TryParse で業務SE が踏む3つのハマり — なぜ Parse + try/catch が業務系で刺さるのか
// これが本番で刺さるやつ
foreach (var line in csvLines) {
try {
var amount = int.Parse(line[2]); // 空欄 / 全角数字 / カンマ入りで FormatException
// 業務処理
} catch (FormatException ex) {
log.Error($"行 {line[0]} の金額が不正: {ex}"); // ログ汚染
}
}
▸ 実行ボタンで結果を表示
Source収録記事
この snippet は記事の「なぜ Parse + try/catch が業務系で刺さるのか」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
4 件// 正解 foreach (var line in csvLines) { if (int.TryParse(line[2], out var amount)) { // 業務処理
▶ 実行可
なぜ Parse + try/catch が業務系で刺さるのか
#2a821b7d5eed
string[] inputs = { "1234", "0", "-5", "", "abc", "123", "1,000", null! }; foreach (var s in inputs) { if (int.TryParse(s, out var value)) {
▶ 実行可
パターン1: int.TryParse — 数値変換は bool 戻り値 + out var
#acdf00b7b5e4
using System.Globalization; string[] inputs = { "2026/05/19", "2026-05-19", "2026/5/19", "05/19/2026" };
▶ 実行可
パターン2: DateTime.TryParseExact + InvariantCulture — ロケール事故をゼロに
#c52514aef32b
public enum Status { Active = 1, Inactive = 2, Pending = 3 } string[] inputs = { "Active", "active", "Pending", "Unknown", "0", "99", "" };
▶ 実行可
パターン3: Enum.TryParse + IsDefined — 2段ガードで数字文字列の罠も封じる
#b310074d2048
