List.Find メソッド
アセンブリ: mscorlib (mscorlib.dll 内)

Dim instance As List(Of T) Dim match As Predicate(Of T) Dim returnValue As T returnValue = instance.Find(match)
戻り値
見つかった場合は、指定された述語によって定義された条件と一致する最初の要素。それ以外の場合は、型 T の既定値。


Predicate は、渡されたオブジェクトがデリゲートで定義された条件と一致した場合にtrue を返すメソッドのデリゲートです。現在の List の要素は、それぞれ Predicate デリゲートに渡されます。この処理は、List 内の先頭の要素から、最後の要素まで繰り返し行われます。一致する要素が見つかった時点で処理が終了します。
![]() |
---|
値型が格納されたリストの検索時には、その型の既定値が検索述語を満たしていないことを確認します。そうでない場合は、一致するものが見つからなかったことを示す既定値と、その型の既定値を取得したリスト要素とを区別する方法はありません。既定値が検索述語を満たしている場合は、代わりに FindIndex メソッドを使用します。 |

Find、FindLast、および FindAll の各メソッドのコード例を次に示します。8 つの恐竜の名前で、その内の 2 つ (1 番目と 5 番目の位置) は "saurus" で終わる名前が格納された、文字列の List が作成されます。このコード例では、EndsWithSaurus という名前の検索述語のメソッドも定義されます。このメソッドは文字列パラメータを受け取り、入力文字列が "saurus" で終わっているかどうかを示すブール値を返します。
Find メソッドはリストを先頭から走査し、次に各要素を EndsWithSaurus メソッドに渡します。EndsWithSaurus メソッドが要素 "Amargasaurus" に対して true を返すと、検索が停止します。
![]() |
---|
C# と Visual Basic では、Predicate<string> デリゲート (Visual Basic では Predicate(Of String)) を明示的に作成する必要はありません。これらの言語はコンテキストから正しいデリゲートを推測し、自動的に作成します。 |
FindLast メソッドを使用して、リストを末尾から逆方向に検索します。5 番目の位置で要素 "Dilophosaurus" が見つかります。FindAll メソッドを使用して、"saurus" で終わるすべての要素が格納された List を返します。それらの要素が表示されます。
最後に、RemoveAll メソッドを使用して "saurus" で終わるすべてのエントリを削除し、Exists メソッドでそれらの文字列がすべて消えたことを示します。
Imports System Imports System.Collections.Generic Public Class Example Public Shared Sub Main() Dim dinosaurs As New List(Of String) dinosaurs.Add("Compsognathus") dinosaurs.Add("Amargasaurus") dinosaurs.Add("Oviraptor") dinosaurs.Add("Velociraptor") dinosaurs.Add("Deinonychus") dinosaurs.Add("Dilophosaurus") dinosaurs.Add("Gallimimus") dinosaurs.Add("Triceratops") Console.WriteLine() For Each dinosaur As String In dinosaurs Console.WriteLine(dinosaur) Next Console.WriteLine(vbLf & _ "TrueForAll(AddressOf EndsWithSaurus: {0}", _ dinosaurs.TrueForAll(AddressOf EndsWithSaurus)) Console.WriteLine(vbLf & _ "Find(AddressOf EndsWithSaurus): {0}", _ dinosaurs.Find(AddressOf EndsWithSaurus)) Console.WriteLine(vbLf & _ "FindLast(AddressOf EndsWithSaurus): {0}", _ dinosaurs.FindLast(AddressOf EndsWithSaurus)) Console.WriteLine(vbLf & _ "FindAll(AddressOf EndsWithSaurus):") Dim sublist As List(Of String) = _ dinosaurs.FindAll(AddressOf EndsWithSaurus) For Each dinosaur As String In sublist Console.WriteLine(dinosaur) Next Console.WriteLine(vbLf & _ "{0} elements removed by RemoveAll(AddressOf EndsWithSaurus).", _ dinosaurs.RemoveAll(AddressOf EndsWithSaurus)) Console.WriteLine(vbLf & "List now contains:") For Each dinosaur As String In dinosaurs Console.WriteLine(dinosaur) Next Console.WriteLine(vbLf & _ "Exists(AddressOf EndsWithSaurus): {0}", _ dinosaurs.Exists(AddressOf EndsWithSaurus)) End Sub ' Search predicate returns true if a string ends in "saurus". Private Shared Function EndsWithSaurus(ByVal s As String) _ As Boolean ' AndAlso prevents evaluation of the second Boolean ' expression if the string is so short that an error ' would occur. If (s.Length > 5) AndAlso _ (s.Substring(s.Length - 6).ToLower() = "saurus") Then Return True Else Return False End If End Function End Class ' This code example produces the following output: ' 'Compsognathus 'Amargasaurus 'Oviraptor 'Velociraptor 'Deinonychus 'Dilophosaurus 'Gallimimus 'Triceratops ' 'TrueForAll(AddressOf EndsWithSaurus: False ' 'Find(AddressOf EndsWithSaurus): Amargasaurus ' 'FindLast(AddressOf EndsWithSaurus): Dilophosaurus ' 'FindAll(AddressOf EndsWithSaurus): 'Amargasaurus 'Dilophosaurus ' '2 elements removed by RemoveAll(AddressOf EndsWithSaurus). ' 'List now contains: 'Compsognathus 'Oviraptor 'Velociraptor 'Deinonychus 'Gallimimus 'Triceratops ' 'Exists(AddressOf EndsWithSaurus): False
using System; using System.Collections.Generic; public class Example { public static void Main() { List<string> dinosaurs = new List<string>(); dinosaurs.Add("Compsognathus"); dinosaurs.Add("Amargasaurus"); dinosaurs.Add("Oviraptor"); dinosaurs.Add("Velociraptor"); dinosaurs.Add("Deinonychus"); dinosaurs.Add("Dilophosaurus"); dinosaurs.Add("Gallimimus"); dinosaurs.Add("Triceratops"); Console.WriteLine(); foreach(string dinosaur in dinosaurs) { Console.WriteLine(dinosaur); } Console.WriteLine("\nTrueForAll(EndsWithSaurus): {0}", dinosaurs.TrueForAll(EndsWithSaurus)); Console.WriteLine("\nFind(EndsWithSaurus): {0}", dinosaurs.Find(EndsWithSaurus)); Console.WriteLine("\nFindLast(EndsWithSaurus): {0}", dinosaurs.FindLast(EndsWithSaurus)); Console.WriteLine("\nFindAll(EndsWithSaurus):"); List<string> sublist = dinosaurs.FindAll(EndsWithSaurus); foreach(string dinosaur in sublist) { Console.WriteLine(dinosaur); } Console.WriteLine( "\n{0} elements removed by RemoveAll(EndsWithSaurus).", dinosaurs.RemoveAll(EndsWithSaurus)); Console.WriteLine("\nList now contains:"); foreach(string dinosaur in dinosaurs) { Console.WriteLine(dinosaur); } Console.WriteLine("\nExists(EndsWithSaurus): {0}", dinosaurs.Exists(EndsWithSaurus)); } // Search predicate returns true if a string ends in "saurus". private static bool EndsWithSaurus(String s) { if ((s.Length > 5) && (s.Substring(s.Length - 6).ToLower() == "saurus")) { return true; } else { return false; } } } /* This code example produces the following output: Compsognathus Amargasaurus Oviraptor Velociraptor Deinonychus Dilophosaurus Gallimimus Triceratops TrueForAll(EndsWithSaurus): False Find(EndsWithSaurus): Amargasaurus FindLast(EndsWithSaurus): Dilophosaurus FindAll(EndsWithSaurus): Amargasaurus Dilophosaurus 2 elements removed by RemoveAll(EndsWithSaurus). List now contains: Compsognathus Oviraptor Velociraptor Deinonychus Gallimimus Triceratops Exists(EndsWithSaurus): False */
using namespace System; using namespace System::Collections::Generic; // Search predicate returns true if a string ends in "saurus". bool EndsWithSaurus(String^ s) { if ((s->Length > 5) && (s->Substring(s->Length - 6)->ToLower() == "saurus")) { return true; } else { return false; } }; void main() { List<String^>^ dinosaurs = gcnew List<String^>(); dinosaurs->Add("Compsognathus"); dinosaurs->Add("Amargasaurus"); dinosaurs->Add("Oviraptor"); dinosaurs->Add("Velociraptor"); dinosaurs->Add("Deinonychus"); dinosaurs->Add("Dilophosaurus"); dinosaurs->Add("Gallimimus"); dinosaurs->Add("Triceratops"); Console::WriteLine(); for each(String^ dinosaur in dinosaurs ) { Console::WriteLine(dinosaur); } Console::WriteLine("\nTrueForAll(EndsWithSaurus): {0}", dinosaurs->TrueForAll(gcnew Predicate<String^>(EndsWithSaurus))); Console::WriteLine("\nFind(EndsWithSaurus): {0}", dinosaurs->Find(gcnew Predicate<String^>(EndsWithSaurus))); Console::WriteLine("\nFindLast(EndsWithSaurus): {0}", dinosaurs->FindLast(gcnew Predicate<String^>(EndsWithSaurus))); Console::WriteLine("\nFindAll(EndsWithSaurus):"); List<String^>^ sublist = dinosaurs->FindAll(gcnew Predicate<String^>(EndsWithSaurus)); for each(String^ dinosaur in sublist) { Console::WriteLine(dinosaur); } Console::WriteLine( "\n{0} elements removed by RemoveAll(EndsWithSaurus).", dinosaurs->RemoveAll(gcnew Predicate<String^>(EndsWithSaurus))); Console::WriteLine("\nList now contains:"); for each(String^ dinosaur in dinosaurs) { Console::WriteLine(dinosaur); } Console::WriteLine("\nExists(EndsWithSaurus): {0}", dinosaurs->Exists(gcnew Predicate<String^>(EndsWithSaurus))); } /* This code example produces the following output: Compsognathus Amargasaurus Oviraptor Velociraptor Deinonychus Dilophosaurus Gallimimus Triceratops TrueForAll(EndsWithSaurus): False Find(EndsWithSaurus): Amargasaurus FindLast(EndsWithSaurus): Dilophosaurus FindAll(EndsWithSaurus): Amargasaurus Dilophosaurus 2 elements removed by RemoveAll(EndsWithSaurus). List now contains: Compsognathus Oviraptor Velociraptor Deinonychus Gallimimus Triceratops Exists(EndsWithSaurus): False */

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。


- List.Find メソッドのページへのリンク