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

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


Enumerable.SingleOrDefault Метод

Определение

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

Перегрузки

SingleOrDefault<TSource>(IEnumerable<TSource>)

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

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

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

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

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

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

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

SingleOrDefault<TSource>(IEnumerable<TSource>)

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

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

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

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

TSource

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

Параметры

source
IEnumerable<TSource>

Объект IEnumerable<T>, единственный элемент которого требуется возвратить.

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

TSource

Единственный элемент входной последовательности или default(TSource), если в последовательности нет элементов.

Исключения

source имеет значение null.

Входная последовательность содержит более одного элемента.

Примеры

В следующем примере кода показано, как использовать SingleOrDefault<TSource>(IEnumerable<TSource>) для выбора единственного элемента массива.

C#
string[] fruits1 = { "orange" };

string fruit1 = fruits1.SingleOrDefault();

Console.WriteLine(fruit1);

/*
 This code produces the following output:

 orange
*/

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

C#
string[] fruits2 = { };

string fruit2 = fruits2.SingleOrDefault();

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

/*
 This code produces the following output:

 No such string!
*/

Иногда значение default(TSource) не является значением по умолчанию, которое требуется использовать, если коллекция не содержит элементов. Вместо проверки результата на наличие нежелательного значения по умолчанию и последующего изменения его при необходимости можно использовать DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) метод , чтобы указать значение по умолчанию, которое будет использоваться, если коллекция пуста. Затем вызовите Single<TSource>(IEnumerable<TSource>) , чтобы получить элемент . В следующем примере кода используются оба метода для получения значения по умолчанию 1, если коллекция номеров страниц пуста. Так как значение по умолчанию для целого числа равно 0, которое обычно не является допустимым номером страницы, вместо него необходимо указать значение по умолчанию как 1. Первая переменная результата проверяется на наличие нежелательного значения по умолчанию после завершения выполнения запроса. Вторая результовая переменная получается с помощью DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) для указания значения по умолчанию 1.

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

Комментарии

Значением по умолчанию для ссылочных типов и типов, допускающих значение NULL, является null.

Метод SingleOrDefault не позволяет указать значение по умолчанию. Если вы хотите указать значение по умолчанию, отличное от default(TSource), используйте DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) метод , как описано в разделе Пример.

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

.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

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

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

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

C#
public static TSource SingleOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
C#
public static TSource? SingleOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);

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

TSource

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

Параметры

source
IEnumerable<TSource>

Объект IEnumerable<T>, из которого требуется возвратить единственный элемент.

predicate
Func<TSource,Boolean>

Функция для проверки элемента на соответствие условию.

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

TSource

Единственный элемент входной последовательности, удовлетворяющий условию, или default(TSource), если такой элемент не найден.

Исключения

Параметр source или predicate имеет значение null.

Условию предиката predicate удовлетворяет более одного элемента.

Примеры

В следующем примере кода показано, как использовать SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) для выбора единственного элемента массива, удовлетворяющего условию.

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

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

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

Комментарии

Значением по умолчанию для ссылочных типов и типов, допускающих значение NULL, является null.

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

.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

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

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

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

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

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

TSource

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

Параметры

source
IEnumerable<TSource>

Объект IEnumerable<T>, единственный элемент которого требуется возвратить.

defaultValue
TSource

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

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

TSource

Отдельный элемент входной последовательности или defaultValue значение , если последовательность не содержит элементов.

Исключения

source имеет значение null.

Входная последовательность содержит более одного элемента.

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

.NET 9 и другие версии
Продукт Версии
.NET 6, 7, 8, 9

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

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

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

C#
public static TSource SingleOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate, TSource defaultValue);

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

TSource

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

Параметры

source
IEnumerable<TSource>

Объект IEnumerable<T>, из которого требуется возвратить единственный элемент.

predicate
Func<TSource,Boolean>

Функция для проверки элемента на соответствие условию.

defaultValue
TSource

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

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

TSource

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

Исключения

Параметр source или predicate имеет значение null.

Условию предиката predicate удовлетворяет более одного элемента.

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

.NET 9 и другие версии
Продукт Версии
.NET 6, 7, 8, 9