C#
using 宣言の落とし穴: スコープが関数末尾になる
出典: C# using の3形態 — using ステートメント / using 宣言 / await using で業務SE が踏む使い分け — 形態②: using 宣言 (C# 8+ / 関数末尾まで自動 Dispose) / using 宣言の落とし穴: スコープが関数末尾になる
static void ProcessOrders()
{
using var conn = new SqlConnection(connStr);
conn.Open();
// ... 50 行ほど何かの処理 ...
using var cmd = conn.CreateCommand();
cmd.CommandText = "UPDATE Orders SET ...";
// ... さらに 30 行 ...
// ここで関数終わり → conn と cmd が一気に Dispose される
// ★ 順序: cmd が先・conn が後 (宣言と逆順で Dispose)
}
▸ この snippet は実行結果未収録
▸ 実行結果は未収録です
Source収録記事
この snippet は記事の「形態②: using 宣言 (C# 8+ / 関数末尾まで自動 Dispose) / using 宣言の落とし穴: スコープが関数末尾になる」セクションに登場する。コードの前後の文脈・ハマりどころの解説は記事本文で。
同じ記事から
7 件// 形① using ステートメント using (var reader = new StreamReader("data.txt")) { var line = reader.ReadLine();
▶ 実行可
そもそも using とは何をしているのか
#27097f842757
using System; using System.Data.SqlClient; class Program未収録
形態①: using ステートメント (C# 1.0+ 全環境 OK)
#8a7bb6c44be6
using System; using System.Data.SqlClient; class Program未収録
形態②: using 宣言 (C# 8+ / 関数末尾まで自動 Dispose)
#9b8516083882
using System; using System.IO; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore;未収録
形態③: await using (C# 8+ / IAsyncDisposable)
#747285980e0f
// ❌ ピラミッド (using ネスト 3 段) using (var conn = new SqlConnection(connStr)) using (var cmd = conn.CreateCommand()) using (var reader = cmd.ExecuteReader())未収録
入れ子の解消パターン
#fc33e16750d0
// ✅ using 宣言 (C# 8+) using var conn = new SqlConnection(connStr); using var cmd = conn.CreateCommand(); using var reader = cmd.ExecuteReader();未収録
入れ子の解消パターン
#d29d41340c01
