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