Enumerable.Firstメソッド
【C#】
シーケンスの最初の要素を返します。
public static TSource First<TSource>
(this IEnumerable<TSource> source)
指定された条件を満たす、シーケンスの最初の要素を返します。
public static TSource First<TSource>
(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
【VB】
シーケンスの最初の要素を返します。
<ExtensionAttribute>
Public Shared Function First(Of TSource)
(source As IEnumerable(Of TSource))
As TSource
指定された条件を満たす、シーケンスの最初の要素を返します。
<ExtensionAttribute>
Public Shared Function First(Of TSource)
(source As IEnumerable(Of TSource), predicate As Func(Of TSource, Boolean))
As TSource
Enumerable.FirstOrDefaultメソッド
【C#】
シーケンスの最初の要素を返します。シーケンスに要素が含まれていない場合は既定値を返します。
public static TSource FirstOrDefault<TSource>
(this IEnumerable<TSource> source)
条件を満たす、シーケンスの最初の要素を返します。このような要素が見つからない場合は既定値を返します。
public static TSource FirstOrDefault
(this IEnumerable<TSource> source, Func predicate)
【VB】
シーケンスの最初の要素を返します。シーケンスに要素が含まれていない場合は既定値を返します。
<ExtensionAttribute>
Public Shared Function FirstOrDefault(Of TSource)
(source As IEnumerable(Of TSource))
As TSource
条件を満たす、シーケンスの最初の要素を返します。このような要素が見つからない場合は既定値を返します。
<ExtensionAttribute>
Public Shared Function FirstOrDefault(Of TSource)
(source As IEnumerable(Of TSource), predicate As Func(Of TSource, Boolean))
As TSource
シーケンス(配列やコレクションなど)から一番最初の要素を取得します。
Firsttメソッドは一番最初の要素がなければ(つまりシーケンスにデータがない状態)例外をスローします。
FirstOrDefaultメソッドは一番最初の要素がなければデフォルト値(値型なら初期値、参照型ならnull)を返します。
このメソッドは即時実行されます。
テストデータです。
【C#】
private class Fruit
{
public string Name { get; set; }
public string Rank { get; set; }
public decimal Price { get; set; }
}
var fruits = new List<Fruit>()
{
new Fruit(){Name = "りんご", Rank = "A" , Price = 1000 },
new Fruit(){Name = "みかん", Rank = "A" , Price = 600 },
new Fruit(){Name = "ぶどう", Rank = "B" , Price = 1200 },
new Fruit(){Name = "りんご", Rank = "B" , Price = 800 },
new Fruit(){Name = "みかん", Rank = "A" , Price = 500 }
};
【VB】
Private Class Fruit
Public Property Name As String
Public Property Rank As String
Public Property Price As Decimal
End Class
Dim fruits = New List(Of Fruit)() From
{
New Fruit() With {.Name = "りんご", .Rank = "A", .Price = 1000},
New Fruit() With {.Name = "みかん", .Rank = "A", .Price = 600},
New Fruit() With {.Name = "ぶどう", .Rank = "B", .Price = 1200},
New Fruit() With {.Name = "りんご", .Rank = "B", .Price = 800},
New Fruit() With {.Name = "みかん", .Rank = "A", .Price = 500}
}
まずはFirstメソッド、FirstOrDefaultメソッドを使用して、一番最初の要素を取得します。
一番最初の要素は存在するので、どちらも問題なく取得できます。
【C#】
//Firstメソッドを使用して、一番最初の要素を取得
Fruit fruit1 = fruits.First();
//出力
Console.WriteLine(fruit1.Name);
//りんご
//FirstOrDefaultメソッドを使用して、一番最初の要素を取得
Fruit fruit2 = fruits.FirstOrDefault();
//出力
Console.WriteLine(fruit2.Name);
//りんご
【VB】
'Firstメソッドを使用して、一番最初の要素を取得
Dim fruit1 As Fruit = fruits.First()
'出力
Console.WriteLine(fruit1.Name)
'りんご
'FirstOrDefaultメソッドを使用して、一番最初の要素を取得
Dim fruit2 As Fruit = fruits.FirstOrDefault()
'出力
Console.WriteLine(fruit2.Name)
'りんご
次にリストのデータを削除して、存在しない一番最初の要素を取得してみます。
FirstメソッドはInvalidOperationException例外がスローされるますが、
FirstOrDefaultメソッドでは、参照型の規定値であるnullが返ります。
【C#】
//リストからデータを削除
fruits.Clear();
//Firstメソッドを使用して、一番最初の要素を取得
//例外InvalidOperationExceptionがスローされる
Fruit fruit1 = fruits.First();
//FirstOrDefaultメソッドを使用して、一番最初の要素を取得
//参照型なのでnullが返る
Fruit fruit2 = fruits.FirstOrDefault();
//出力
Console.WriteLine(fruit2 == null ? "null" : fruit2.Name);
//null
【VB】
'リストからデータを削除
fruits.Clear()
'Firstメソッドを使用して、一番最初の要素を取得
'例外InvalidOperationExceptionがスローされる
Dim fruit1 As Fruit = fruits.First()
'FirstOrDefaultメソッドを使用して、一番最初の要素を取得
'参照型なのでnullが返る
Dim fruit2 As Fruit = fruits.FirstOrDefault()
'出力
Console.WriteLine(If(fruit2 Is Nothing, "nothing", fruit2.Name))
'nothing
Firstメソッド、FirstOrDefaultメソッドには、抽出条件を指定できるオーバーロードメソッドがあります。
抽出条件を指定すると、抽出条件に該当したデータの一番最初の要素を取得できます。
該当するデータがない場合、Firstメソッドは例外をスローし、FirstOrDefaultメソッドは規定値を返します。
【C#】
//Firstメソッドを使用して、抽出条件に該当する一番最初の要素を取得
Fruit fruit1 = fruits.First( itm => itm.Name == "りんご");
//出力
Console.WriteLine("名称={0}, ランク={1}, 値段={2}", fruit1.Name, fruit1.Rank, fruit1.Price.ToString("#,##0"));
//名称=りんご, ランク=A, 値段=1,000
//FirstOrDefaultメソッドを使用して、抽出条件に該当する一番最初の要素を取得
Fruit fruit2 = fruits.FirstOrDefault(itm => itm.Name == "みかん");
//出力
Console.WriteLine("名称={0}, ランク={1}, 値段={2}", fruit2.Name, fruit2.Rank, fruit2.Price.ToString("#,##0"));
//名称=みかん, ランク=A, 値段=600
【VB】
'Firstメソッドを使用して、一番最初の要素を取得
Dim fruit1 As Fruit = fruits.First(Function(itm) itm.Name = "りんご")
'出力
Console.WriteLine("名称={0}, ランク={1}, 値段={2}", fruit1.Name, fruit1.Rank, fruit1.Price.ToString("#,##0"))
'名称=りんご, ランク=A, 値段=1,000
'FirstOrDefaultメソッドを使用して、一番最初の要素を取得
Dim fruit2 As Fruit = fruits.FirstOrDefault(Function(itm) itm.Name = "みかん")
'出力
Console.WriteLine("名称={0}, ランク={1}, 値段={2}", fruit2.Name, fruit2.Rank, fruit2.Price.ToString("#,##0"))
'名称=みかん, ランク=A, 値段=600
※VBの場合、コンパイルオプションで「Option Infer」をONにし、型推論を有効にしてください。
.Net(VB C#) LINQのメソッド一覧
0 件のコメント:
コメントを投稿