対応バージョン: C# 3.5
雑多な型のデータを含むコレクションから特定の型のデータだけ処理したいとします。nullも対象外とします。
OLD CODE: §
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
object[] obj = { "abc", null, 123 };
foreach (var n in obj)
{
if (n is string)
{
Console.WriteLine("{0} has {1} characters", n, ((string)n).Length);
}
}
}
}
NEW CODE: §
using System;
using System.Linq;
class Program
{
static void Main(string[] args)
{
object[] obj = { "abc", null, 123 };
foreach (var n in obj.OfType<string>())
{
Console.WriteLine("{0} has {1} characters", n, n.Length);
}
}
}
実行結果: §
abc has 3 characters
解説: §
OfTypeメソッド。うっかり見落としていましたが、強力です。これを使うだけで、特定の型のオブジェクトだけ抽出できます。もちろん、その型に変換可能なオブジェクトも含まれます。クエリ式で特定の型を除外する必要も無くなります。