C#でLINQを使ってコードを書いていて下記のようなパターンにぶち当たったのでその備忘録。
まず。配列を用意。
static void Main(string[] args)
{
var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
}
この中から、3で割り切れる数字を取得してみる。
var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
var extractionItems = items.Where(item => item % 3 == 0);
foreach (var item in extractionItems)
{
Console.WriteLine(item);
}
Console.ReadLine();
結果はこんな感じになる。
では結果がない場合の処理をやってみる。
例えば、10000で割り切れる場合の数字を取得してみるが、MAXの数字は100なので、値は絶対にない。
static void Main(string[] args)
{
var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
var extractionItems = items.Where(item => item % 10000 == 0);
foreach (var item in extractionItems)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
結果はこう
なぜかNullPointerExeptionがスローされていない。
デバッグで中身を見てみるとNullではない。
とりあえず、列挙体がないという結果が返っているらしい。
static void Main(string[] args)
{
var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
var extractionItems = items.Where(item => item % 10000 == 0);
if (extractionItems == null)
{
Console.WriteLine("結果はNullです。");
}
else
{
Console.WriteLine("結果をNullではありません。");
}
Console.ReadLine();
}
なのでこれにNull回避をしても下記のようになる。
目次
C#でLinqを使って結果Nullを回避する。
ではどのようにして、Linqの結果がない場合を捕捉するのか?
下記のようにすればいい。
class Program
{
static void Main(string[] args)
{
var items = new int[]{1,2,3,5,8,9,7,10,66,78,99,100};
var extractionItems = items.Where(item => item % 10000 == 0);
if (extractionItems.Any())
{
Console.WriteLine("結果がありました。");
}
else
{
Console.WriteLine("結果はありません。");
}
Console.ReadLine();
}
}
コメント