Enumerable.SingleOrDefault Methode

Definitie

Retourneert één specifiek element van een reeks of een standaardwaarde als dat element niet wordt gevonden.

Overloads

Name Description
SingleOrDefault<TSource>(IEnumerable<TSource>)

Retourneert het enige element van een reeks of een standaardwaarde als de reeks leeg is; met deze methode wordt een uitzondering gegenereerd als er meer dan één element in de reeks staat.

SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Retourneert het enige element van een reeks die voldoet aan een opgegeven voorwaarde of een standaardwaarde als er geen dergelijk element bestaat; met deze methode wordt een uitzondering gegenereerd als meer dan één element voldoet aan de voorwaarde.

SingleOrDefault<TSource>(IEnumerable<TSource>)

Retourneert het enige element van een reeks of een standaardwaarde als de reeks leeg is; met deze methode wordt een uitzondering gegenereerd als er meer dan één element in de reeks staat.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource SingleOrDefault(System::Collections::Generic::IEnumerable<TSource> ^ source);
public static TSource SingleOrDefault<TSource>(this System.Collections.Generic.IEnumerable<TSource> source);
static member SingleOrDefault : seq<'Source> -> 'Source
<Extension()>
Public Function SingleOrDefault(Of TSource) (source As IEnumerable(Of TSource)) As TSource

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> om het ene element van te retourneren.

Retouren

TSource

Het enige element van de invoerreeks of default(TSource) als de reeks geen elementen bevat.

Uitzonderingen

source is null.

De invoerreeks bevat meer dan één element.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe SingleOrDefault<TSource>(IEnumerable<TSource>) u het enige element van een matrix selecteert.

string[] fruits1 = { "orange" };

string fruit1 = fruits1.SingleOrDefault();

Console.WriteLine(fruit1);

/*
 This code produces the following output:

 orange
*/
' Create an array that contains one item.
Dim fruits1() As String = {"orange"}

' Get the single item in the array or else a default value.
Dim result As String = fruits1.SingleOrDefault()

' Display the result.
Console.WriteLine($"First array: {result}")

In het volgende codevoorbeeld ziet u dat SingleOrDefault<TSource>(IEnumerable<TSource>) een standaardwaarde wordt geretourneerd wanneer de reeks leeg is.

string[] fruits2 = { };

string fruit2 = fruits2.SingleOrDefault();

Console.WriteLine(
    String.IsNullOrEmpty(fruit2) ? "No such string!" : fruit2);

/*
 This code produces the following output:

 No such string!
*/
' Create an empty array.
Dim fruits2() As String = {}

result = String.Empty

' Get the single item in the array or else a default value.
result = fruits2.SingleOrDefault()

' Display the result.
Dim output As String =
IIf(String.IsNullOrEmpty(result), "No single item found", result)
Console.WriteLine($"Second array: {output}")

' This code produces the following output:
'
' First array: orange
' Second array: No single item found

Soms is de waarde default(TSource) niet de standaardwaarde die u wilt gebruiken als de verzameling geen elementen bevat. In plaats van het resultaat te controleren op de ongewenste standaardwaarde en deze vervolgens indien nodig te wijzigen, kunt u de DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) methode gebruiken om de standaardwaarde op te geven die u wilt gebruiken als de verzameling leeg is. Single<TSource>(IEnumerable<TSource>) Roep vervolgens aan om het element te verkrijgen. In het volgende codevoorbeeld worden beide technieken gebruikt om een standaardwaarde van 1 te verkrijgen als een verzameling paginanummers leeg is. Omdat de standaardwaarde voor een geheel getal 0 is, wat meestal geen geldig paginanummer is, moet de standaardwaarde worden opgegeven als 1. De eerste resultaatvariabele wordt gecontroleerd op de ongewenste standaardwaarde nadat de query is uitgevoerd. De tweede resultaatvariabele wordt verkregen met behulp van DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) het opgeven van een standaardwaarde van 1.

int[] pageNumbers = { };

// Setting the default value to 1 after the query.
int pageNumber1 = pageNumbers.SingleOrDefault();
if (pageNumber1 == 0)
{
    pageNumber1 = 1;
}
Console.WriteLine("The value of the pageNumber1 variable is {0}", pageNumber1);

// Setting the default value to 1 by using DefaultIfEmpty() in the query.
int pageNumber2 = pageNumbers.DefaultIfEmpty(1).Single();
Console.WriteLine("The value of the pageNumber2 variable is {0}", pageNumber2);

/*
 This code produces the following output:

 The value of the pageNumber1 variable is 1
 The value of the pageNumber2 variable is 1
*/
Dim pageNumbers() As Integer = {}

' Setting the default value to 1 after the query.
Dim pageNumber1 As Integer = pageNumbers.SingleOrDefault()
If pageNumber1 = 0 Then
    pageNumber1 = 1
End If
Console.WriteLine($"The value of the pageNumber1 variable is {pageNumber1}")

' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim pageNumber2 As Integer = pageNumbers.DefaultIfEmpty(1).Single()
Console.WriteLine($"The value of the pageNumber2 variable is {pageNumber2}")

' This code produces the following output:

' The value of the pageNumber1 variable is 1
' The value of the pageNumber2 variable is 1

Opmerkingen

De standaardwaarde voor verwijzings- en null-typen is null.

De SingleOrDefault methode biedt geen manier om een standaardwaarde op te geven. Als u een andere standaardwaarde dan default(TSource)wilt opgeven, gebruikt u de DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) methode zoals beschreven in de sectie Voorbeeld.

Van toepassing op

SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)

Retourneert het enige element van een reeks die voldoet aan een opgegeven voorwaarde of een standaardwaarde als er geen dergelijk element bestaat; met deze methode wordt een uitzondering gegenereerd als meer dan één element voldoet aan de voorwaarde.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource SingleOrDefault(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, bool> ^ predicate);
public static TSource SingleOrDefault<TSource>(this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
static member SingleOrDefault : seq<'Source> * Func<'Source, bool> -> 'Source
<Extension()>
Public Function SingleOrDefault(Of TSource) (source As IEnumerable(Of TSource), predicate As Func(Of TSource, Boolean)) As TSource

Type parameters

TSource

Het type van de elementen van source.

Parameters

source
IEnumerable<TSource>

Een IEnumerable<T> om één element van te retourneren.

predicate
Func<TSource,Boolean>

Een functie om een element voor een voorwaarde te testen.

Retouren

TSource

Het enige element van de invoerreeks die voldoet aan de voorwaarde of default(TSource) als er geen dergelijk element wordt gevonden.

Uitzonderingen

source of predicate is null.

Meer dan één element voldoet aan de voorwaarde in predicate.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) u het enige element van een matrix selecteert dat voldoet aan een voorwaarde.

string[] fruits = { "apple", "banana", "mango",
                      "orange", "passionfruit", "grape" };

string fruit1 = fruits.SingleOrDefault(fruit => fruit.Length > 10);

Console.WriteLine(fruit1);

/*
 This code produces the following output:

 passionfruit
*/
' Create an array of strings.
Dim fruits() As String =
{"apple", "banana", "mango", "orange", "passionfruit", "grape"}

' Get the single item in the array whose length is > 10.
Dim fruit1 As String =
fruits.SingleOrDefault(Function(fruit) fruit.Length > 10)

' Display the result.
Console.WriteLine($"First array: {fruit1}")

In het volgende codevoorbeeld ziet u dat SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) een standaardwaarde wordt geretourneerd wanneer de reeks geen elementen bevat die voldoen aan de voorwaarde.

string fruit2 =
    fruits.SingleOrDefault(fruit => fruit.Length > 15);

Console.WriteLine(
    String.IsNullOrEmpty(fruit2) ? "No such string!" : fruit2);

/*
 This code produces the following output:

 No such string!
*/
' Get the single item in the array whose length is > 15.
Dim fruit2 As String =
fruits.SingleOrDefault(Function(fruit) fruit.Length > 15)

' Display the result.
Dim output As String =
IIf(String.IsNullOrEmpty(fruit2), "No single item found", fruit2)
Console.WriteLine($"Second array: {output}")

' This code produces the following output:
'
' First array: passionfruit
' Second array: No single item found

Opmerkingen

De standaardwaarde voor verwijzings- en null-typen is null.

Van toepassing op