Enumerable.DefaultIfEmpty Metodo

Definizione

Restituisce gli elementi di un oggetto IEnumerable<T> o una raccolta di singleton di valore predefinito se la sequenza è vuota.

Overload

DefaultIfEmpty<TSource>(IEnumerable<TSource>)

Restituisce gli elementi della sequenza specificata o il valore predefinito del parametro di tipo in una raccolta di singleton se la sequenza è vuota.

DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource)

Restituisce gli elementi della sequenza specificata o il valore specificato in una raccolta di singleton se la sequenza è vuota.

DefaultIfEmpty<TSource>(IEnumerable<TSource>)

Restituisce gli elementi della sequenza specificata o il valore predefinito del parametro di tipo in una raccolta di singleton se la sequenza è vuota.

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

Parametri di tipo

TSource

Tipo degli elementi di source.

Parametri

source
IEnumerable<TSource>

Sequenza per cui restituire un valore predefinito se è vuota.

Restituisce

IEnumerable<TSource>

Un oggetto IEnumerable<T> che contiene il valore predefinito per il tipo TSource se source è vuoto; in caso contrario, source.

Eccezioni

source è null.

Esempio

Gli esempi di codice seguenti illustrano come usare DefaultIfEmpty<TSource>(IEnumerable<TSource>) per fornire un valore predefinito nel caso in cui la sequenza di origine sia vuota.

In questo esempio viene utilizzata una sequenza non vuota.

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void DefaultIfEmptyEx1()
{
    List<Pet> pets =
        new List<Pet>{ new Pet { Name="Barley", Age=8 },
                       new Pet { Name="Boots", Age=4 },
                       new Pet { Name="Whiskers", Age=1 } };

    foreach (Pet pet in pets.DefaultIfEmpty())
    {
        Console.WriteLine(pet.Name);
    }
}

/*
 This code produces the following output:

 Barley
 Boots
 Whiskers
*/
Structure Pet
    Public Name As String
    Public Age As Integer
End Structure

Sub DefaultIfEmptyEx1()
    ' Create a List of Pet objects.
    Dim pets As New List(Of Pet)(New Pet() _
                         {New Pet With {.Name = "Barley", .Age = 8},
                          New Pet With {.Name = "Boots", .Age = 4},
                          New Pet With {.Name = "Whiskers", .Age = 1}})

    Dim output As New System.Text.StringBuilder
    ' Iterate through the items in the List, calling DefaultIfEmpty().
    For Each pet As Pet In pets.DefaultIfEmpty()
        output.AppendLine(pet.Name)
    Next

    ' Display the output.
    Console.WriteLine(output.ToString())
End Sub

' This code produces the following output:
'
' Barley
' Boots
' Whiskers

In questo esempio viene utilizzata una sequenza vuota.

List<int> numbers = new List<int>();

foreach (int number in numbers.DefaultIfEmpty())
{
    Console.WriteLine(number);
}

/*
 This code produces the following output:

 0
*/
' Create an empty List.
Dim numbers As New List(Of Integer)()

Dim output As New System.Text.StringBuilder
' Iterate through the items in the List, calling DefaultIfEmpty().
For Each number As Integer In numbers.DefaultIfEmpty()
    output.AppendLine(number)
Next

' Display the output.
Console.WriteLine(output.ToString())

' This code produces the following output:
'
' 0

Commenti

Questo metodo viene implementato usando l'esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita fino a quando l'oggetto non viene enumerato chiamando direttamente il relativo GetEnumerator metodo o usando foreach in C# o For Each in Visual Basic.

Il valore predefinito per i tipi reference e nullable è null.

Questo metodo può essere usato per produrre un left outer join quando viene combinato con il GroupJoinmetodo ).

Vedi anche

Si applica a

DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource)

Restituisce gli elementi della sequenza specificata o il valore specificato in una raccolta di singleton se la sequenza è vuota.

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

Parametri di tipo

TSource

Tipo degli elementi di source.

Parametri

source
IEnumerable<TSource>

Sequenza per cui restituire il valore specificato se è vuota.

defaultValue
TSource

Valore da restituire se la sequenza è vuota.

Restituisce

IEnumerable<TSource>

Oggetto IEnumerable<T> che contiene defaultValue se source è vuota; in caso contrario, source.

Esempio

Nell'esempio di codice seguente viene illustrato come usare il DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) metodo e specificare un valore predefinito. La prima sequenza non è vuota e la seconda sequenza è vuota.

class Pet
{
    public string Name { get; set; }
    public int Age { get; set; }
}

public static void DefaultIfEmptyEx2()
{
    Pet defaultPet = new Pet { Name = "Default Pet", Age = 0 };

    List<Pet> pets1 =
        new List<Pet>{ new Pet { Name="Barley", Age=8 },
                       new Pet { Name="Boots", Age=4 },
                       new Pet { Name="Whiskers", Age=1 } };

    foreach (Pet pet in pets1.DefaultIfEmpty(defaultPet))
    {
        Console.WriteLine("Name: {0}", pet.Name);
    }

    List<Pet> pets2 = new List<Pet>();

    foreach (Pet pet in pets2.DefaultIfEmpty(defaultPet))
    {
        Console.WriteLine("\nName: {0}", pet.Name);
    }
}

/*
 This code produces the following output:

 Name: Barley
 Name: Boots
 Name: Whiskers

 Name: Default Pet
*/
Structure Pet
    Public Name As String
    Public Age As Integer
End Structure

Sub DefaultIfEmptyEx2()
    ' Create a Pet object to use as the default value.
    Dim defaultPet As New Pet With {.Name = "Default Pet", .Age = 0}

    ' Create a List of Pet objects.
    Dim pets1 As New List(Of Pet)(New Pet() _
                          {New Pet With {.Name = "Barley", .Age = 8},
                           New Pet With {.Name = "Boots", .Age = 4},
                           New Pet With {.Name = "Whiskers", .Age = 1}})

    Dim output1 As New System.Text.StringBuilder
    ' Enumerate the items in the list, calling DefaultIfEmpty()
    ' with a default value.
    For Each pet As Pet In pets1.DefaultIfEmpty(defaultPet)
        output1.AppendLine("Name: " & pet.Name)
    Next

    ' Display the output.
    Console.WriteLine(output1.ToString())

    ' Create an empty List.
    Dim pets2 As New List(Of Pet)

    Dim output2 As New System.Text.StringBuilder
    ' Enumerate the items in the list, calling DefaultIfEmpty()
    ' with a default value.
    For Each pet As Pet In pets2.DefaultIfEmpty(defaultPet)
        output2.AppendLine("Name: " & pet.Name)
    Next

    ' Display the output.
    Console.WriteLine(output2.ToString())
End Sub

' This code produces the following output:
'
' Name: Barley
' Name: Boots
' Name: Whiskers
'
' Name: Default Pet

Commenti

Questo metodo viene implementato usando l'esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita fino a quando l'oggetto non viene enumerato chiamando direttamente il relativo GetEnumerator metodo o usando foreach in C# o For Each in Visual Basic.

Questo metodo può essere usato per produrre un left outer join quando viene combinato con il GroupJoinmetodo ).

Vedi anche

Si applica a