Прочитать на английском

Поделиться через


Enumerable.DefaultIfEmpty Метод

Определение

Возвращает элементы IEnumerable<T>или коллекцию одноэлементов по умолчанию, если последовательность пуста.

Перегрузки

DefaultIfEmpty<TSource>(IEnumerable<TSource>)

Возвращает элементы указанной последовательности или значение параметра типа по умолчанию в одной коллекции, если последовательность пуста.

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

Возвращает элементы указанной последовательности или указанное значение в одной коллекции, если последовательность пуста.

DefaultIfEmpty<TSource>(IEnumerable<TSource>)

Исходный код:
DefaultIfEmpty.cs
Исходный код:
DefaultIfEmpty.cs
Исходный код:
DefaultIfEmpty.cs

Возвращает элементы указанной последовательности или значение параметра типа по умолчанию в одной коллекции, если последовательность пуста.

C#
public static System.Collections.Generic.IEnumerable<TSource> DefaultIfEmpty<TSource> (this System.Collections.Generic.IEnumerable<TSource> source);
C#
public static System.Collections.Generic.IEnumerable<TSource?> DefaultIfEmpty<TSource> (this System.Collections.Generic.IEnumerable<TSource> source);

Параметры типа

TSource

Тип элементов source.

Параметры

source
IEnumerable<TSource>

Последовательность, возвращаемая значение по умолчанию, если она пуста.

Возвращаемое значение

IEnumerable<TSource>

Объект IEnumerable<T>, содержащий значение по умолчанию для типа TSource, если source пусто; в противном случае source.

Исключения

source null.

Примеры

В следующих примерах кода показано, как использовать DefaultIfEmpty<TSource>(IEnumerable<TSource>) для предоставления значения по умолчанию в случае, если исходная последовательность пуста.

В этом примере используется непустая последовательность.

C#
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
*/

В этом примере используется пустая последовательность.

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

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

/*
 This code produces the following output:

 0
*/

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не перечисляется путем вызова метода GetEnumerator напрямую или с помощью foreach в C# или For Each в Visual Basic.

Значение по умолчанию для ссылочных и пустых типов — null.

Этот метод можно использовать для создания левого внешнего соединения при объединении с методом GroupJoin.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

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

Исходный код:
DefaultIfEmpty.cs
Исходный код:
DefaultIfEmpty.cs
Исходный код:
DefaultIfEmpty.cs

Возвращает элементы указанной последовательности или указанное значение в одной коллекции, если последовательность пуста.

C#
public static System.Collections.Generic.IEnumerable<TSource> DefaultIfEmpty<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, TSource defaultValue);

Параметры типа

TSource

Тип элементов source.

Параметры

source
IEnumerable<TSource>

Последовательность, возвращаемая указанное значение, если она пуста.

defaultValue
TSource

Значение, возвращаемое, если последовательность пуста.

Возвращаемое значение

IEnumerable<TSource>

IEnumerable<T>, содержащий defaultValue, если source пуст; в противном случае source.

Примеры

В следующем примере кода показано, как использовать метод DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) и указать значение по умолчанию. Первая последовательность не пуста, а вторая последовательность пуста.

C#
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
*/

Комментарии

Этот метод реализуется с помощью отложенного выполнения. Немедленное возвращаемое значение — это объект, в который хранятся все сведения, необходимые для выполнения действия. Запрос, представленный этим методом, не выполняется, пока объект не перечисляется путем вызова метода GetEnumerator напрямую или с помощью foreach в C# или For Each в Visual Basic.

Этот метод можно использовать для создания левого внешнего соединения при объединении с методом GroupJoin.

См. также раздел

Применяется к

.NET 9 и другие версии
Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0