Export (0) Print
Expand All

List(Of T).Exists Method

Determines whether the List(Of T) contains elements that match the conditions defined by the specified predicate.

Namespace:  System.Collections.Generic
Assembly:  mscorlib (in mscorlib.dll)

'Declaration
Public Function Exists ( _
	match As Predicate(Of T) _
) As Boolean

Parameters

match
Type: System.Predicate(Of T)

The Predicate(Of T) delegate that defines the conditions of the elements to search for.

Return Value

Type: System.Boolean
true if the List(Of T) contains one or more elements that match the conditions defined by the specified predicate; otherwise, false.

ExceptionCondition
ArgumentNullException

match is Nothing.

The Predicate(Of T) is a delegate to a method that returns true if the object passed to it matches the conditions defined in the delegate. The elements of the current List(Of T) are individually passed to the Predicate(Of T) delegate, and processing is stopped when a match is found.

This method performs a linear search; therefore, this method is an O(n) operation, where n is Count.

The following example demonstrates the Contains and Existsmethods on a List(Of T) that contains a simple business object that implements Equals.

Imports System.Collections.Generic
' Simple business object. A PartId is used to identify a part  
' but the part name can change.  
Public Class Part
    Implements IEquatable(Of Part)
    Public Property PartName() As String 
        Get 
            Return m_PartName
        End Get 
        Set(value As String)
            m_PartName = Value
        End Set 
    End Property 
    Private m_PartName As String 
    Public Property PartId() As Integer 
        Get 
            Return m_PartId
        End Get 
        Set(value As Integer)
            m_PartId = Value
        End Set 
    End Property 
    Private m_PartId As Integer 

    Public Overrides Function ToString() As String 
        Return Convert.ToString("ID: " & PartId & "   Name: ") & PartName
    End Function 
    Public Overrides Function Equals(obj As Object) As Boolean 
        If obj Is Nothing Then 
            Return False 
        End If 
        Dim objAsPart As Part = TryCast(obj, Part)
        If objAsPart Is Nothing Then 
            Return False 
        Else 
            Return Equals(objAsPart)
        End If 
    End Function 
    Public Overrides Function GetHashCode() As Integer 
        Return PartId
    End Function 
    Public Overloads Function Equals(other As Part) As Boolean _
        Implements IEquatable(Of Part).Equals
        If other Is Nothing Then 
            Return False 
        End If 
        Return (Me.PartId.Equals(other.PartId))
    End Function 
    ' Should also override == and != operators. 
End Class 
Public Class Example
    Public Shared Sub Main()
        ' Create a list of parts. 
        Dim parts As New List(Of Part)()

        ' Add parts to the list.
        parts.Add(New Part() With { _
             .PartName = "crank arm", _
             .PartId = 1234 _
        })
        parts.Add(New Part() With { _
             .PartName = "chain ring", _
             .PartId = 1334 _
        })
        parts.Add(New Part() With { _
             .PartName = "regular seat", _
             .PartId = 1434 _
        })
        parts.Add(New Part() With { _
             .PartName = "banana seat", _
             .PartId = 1444 _
        })
        parts.Add(New Part() With { _
             .PartName = "cassette", _
             .PartId = 1534 _
        })
        parts.Add(New Part() With { _
             .PartName = "shift lever", _
             .PartId = 1634 _
        })



        ' Write out the parts in the list. This will call the overridden ToString method 
        ' in the Part class.
        Console.WriteLine()
        For Each aPart As Part In parts
            Console.WriteLine(aPart)
        Next 


        ' Check the list for part #1734. This calls the IEquitable.Equals method 
        ' of the Part class, which checks the PartId for equality.
        Console.WriteLine(vbLf & "Contains: Part with Id=1734: {0}",
                          parts.Contains(New Part() With { _
             .PartId = 1734, _
             .PartName = "" _
        }))

        ' Find items where name contains "seat".
        Console.WriteLine(vbLf & "Find: Part where name contains ""seat"": {0}",
                          parts.Find(Function(x) x.PartName.Contains("seat")))

        ' Check if an item with Id 1444 exists.
        Console.WriteLine(vbLf & "Exists: Part with Id=1444: {0}",
                          parts.Exists(Function(x) x.PartId = 1444))

        'This code example produces the following output: 
        '         
        '        ID: 1234   Name: crank arm 
        '        ID: 1334   Name: chain ring 
        '        ID: 1434   Name: regular seat 
        '        ID: 1444   Name: banana seat 
        '        ID: 1534   Name: cassette 
        '        ID: 1634   Name: shift lever 
        
        '        Contains: Part with Id=1734: False 
        
        '        Find: Part where name contains "seat": ID: 1434   Name: regular seat 
        
        '        Exists: Part with Id=1444: True  
        '          

    End Sub 
End Class

The following example demonstrates the Exists method and several other methods that use the Predicate(Of T) generic delegate.

A List(Of T) of strings is created, containing 8 dinosaur names, two of which (at positions 1 and 5) end with "saurus". The example also defines a search predicate method named EndsWithSaurus, which accepts a string parameter and returns a Boolean value indicating whether the input string ends in "saurus".

The Find, FindLast, and FindAll methods are used to search the list with the search predicate method, and then the RemoveAll method is used to remove all entries ending with "saurus".

Finally, the Exists method is called. It traverses the list from the beginning, passing each element in turn to the EndsWithSaurus method. The search stops and the method returns true if the EndsWithSaurus method returns true for any element. The Exists method returns false because all such elements have been removed.

NoteNote

In C# and Visual Basic, it is not necessary to create the Predicate<string> delegate (Predicate(Of String) in Visual Basic) explicitly. These languages infer the correct delegate from context and create it automatically.

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 

        Return s.ToLower().EndsWith("saurus")
    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

.NET Framework

Supported in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Portable Class Library

Supported in: Portable Class Library

.NET for Windows Store apps

Supported in: Windows 8

.NET for Windows Phone apps

Supported in: Windows Phone 8.1, Windows Phone Silverlight 8.1, Windows Phone Silverlight 8

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

Show:
© 2014 Microsoft