C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■91586 / )  Re[20]: メモリリークに関して
□投稿者/ 魔界の仮面弁士 (2232回)-(2019/07/10(Wed) 16:37:37)
No91585 (shu さん) に返信
> C#はswitchでこの要件を満足するのは厳しいと認識しております。
> 一応次のようにすれば可能

C# の言語仕様的には一応、C# 7.0 以降で
「型による分岐」がサポートされるようになっていたりします。

今回は VS2008 (C# 3.0) なので使えないですが…。


foreach (Control c in Controls )
{
 switch (c)
 {
  case System.Windows.Forms.Label _:
  case System.Windows.Forms.TextBox _:
   c.Font.Dispose();
   c.Dispose();
   break;
 }
}

// ----------------

foreach (Control c in Controls )
{
 switch (c)
 {
  case System.Windows.Forms.Label lbl:
   lbl.Font.Dispose();
   lbl.Dispose();
   break;
  case System.Windows.Forms.PictureBox pic:
   pic.Image?.Dispose();
   pic.BackgroundImage?.Dispose();
   pic.Dispose();
   break;
 }
}

ただし、型による分岐はジャンプ命令に変換されないので、
内部的には if 分岐と変わらなくなりますね。
解決済み
返信 編集キー/


管理者用

- Child Tree -