Enumerable.SingleOrDefault Enumerable.SingleOrDefault Enumerable.SingleOrDefault Enumerable.SingleOrDefault Method

Определение

Возвращает единственный конкретный элемент последовательности или значение по умолчанию, если этот элемент не найден.Returns a single, specific element of a sequence, or a default value if that element is not found.

Перегрузки

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

Возвращает единственный элемент последовательности или значение по умолчанию, если последовательность пуста; если в последовательности более одного элемента, генерируется исключение.Returns the only element of a sequence, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence.

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

Возвращает единственный элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если такого элемента не существует; если условию удовлетворяет более одного элемента, вызывается исключение.Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition.

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

Возвращает единственный элемент последовательности или значение по умолчанию, если последовательность пуста; если в последовательности более одного элемента, генерируется исключение.Returns the only element of a sequence, or a default value if the sequence is empty; this method throws an exception if there is more than one element in the sequence.

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

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

TSource

Тип элементов source.The type of the elements of source.

Параметры

source
IEnumerable<TSource>

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

Возвраты

TSource TSource TSource TSource

Единственный элемент входной последовательности или default(TSource), если в последовательности нет элементов.The single element of the input sequence, or default(TSource) if the sequence contains no elements.

Исключения

Свойство source имеет значение null.source is null.

Входная последовательность содержит более одного элемента.The input sequence contains more than one element.

Примеры

В следующем примере кода показано, как использовать SingleOrDefault<TSource>(IEnumerable<TSource>) для выбора единственного элемента массива.The following code example demonstrates how to use SingleOrDefault<TSource>(IEnumerable<TSource>) to select the only element of an array.

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.
MsgBox("First array: " & result)

В следующем примере кода показано, SingleOrDefault<TSource>(IEnumerable<TSource>) что возвращает значение по умолчанию, если последовательность не содержит ровно один элемент.The following code example demonstrates that SingleOrDefault<TSource>(IEnumerable<TSource>) returns a default value when the sequence does not contain exactly one element.

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)
MsgBox("Second array: " & output)

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

Иногда значение default(TSource) не является значением по умолчанию, которое вы хотите использовать, если коллекция не содержит элементов.Sometimes the value of default(TSource) is not the default value that you want to use if the collection contains no elements. Вместо того чтобы проверять результат для нежелательного значения по умолчанию и затем менять его при необходимости, можно DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) использовать метод, чтобы указать значение по умолчанию, которое будет использоваться, если коллекция пуста.Instead of checking the result for the unwanted default value and then changing it if necessary, you can use the DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) method to specify the default value that you want to use if the collection is empty. Затем вызовите Single<TSource>(IEnumerable<TSource>) метод, чтобы получить элемент.Then, call Single<TSource>(IEnumerable<TSource>) to obtain the element. В следующем примере кода используются оба способа получения значения по умолчанию, равного 1, если коллекция номеров страниц пуста.The following code example uses both techniques to obtain a default value of 1 if a collection of page numbers is empty. Так как значение по умолчанию для целого числа равно 0, что обычно не является допустимым номером страницы, значение по умолчанию должно быть равно 1.Because the default value for an integer is 0, which is not usually a valid page number, the default value must be specified as 1 instead. Первая результирующая переменная проверяется на наличие нежелательного значения по умолчанию после завершения выполнения запроса.The first result variable is checked for the unwanted default value after the query has finished executing. Вторая результирующая переменная получается с помощью DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) , чтобы указать значение по умолчанию 1.The second result variable is obtained by using DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) to specify a default value of 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
MsgBox(String.Format("The value of the pageNumber1 variable is {0}", pageNumber1))

' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim pageNumber2 As Integer = pageNumbers.DefaultIfEmpty(1).Single()
MsgBox(String.Format("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.The default value for reference and nullable types is null.

SingleOrDefault Метод не предоставляет способ указания значения по умолчанию.The SingleOrDefault method does not provide a way to specify a default value. Если вы хотите указать значение по умолчанию, отличное default(TSource)от, DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) используйте метод, как описано в разделе "пример".If you want to specify a default value other than default(TSource), use the DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) method as described in the Example section.

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

Возвращает единственный элемент последовательности, удовлетворяющий указанному условию, или значение по умолчанию, если такого элемента не существует; если условию удовлетворяет более одного элемента, вызывается исключение.Returns the only element of a sequence that satisfies a specified condition or a default value if no such element exists; this method throws an exception if more than one element satisfies the condition.

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

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

TSource

Тип элементов source.The type of the elements of source.

Параметры

source
IEnumerable<TSource>

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

predicate
Func<TSource,Boolean>

Функция для проверки элемента на соответствие условию.A function to test an element for a condition.

Возвраты

TSource TSource TSource TSource

Единственный элемент входной последовательности, удовлетворяющий условию, или default(TSource), если такой элемент не найден.The single element of the input sequence that satisfies the condition, or default(TSource) if no such element is found.

Исключения

Значение параметра source или predicatenull.source or predicate is null.

Условию предиката predicate удовлетворяет более одного элемента.More than one element satisfies the condition in predicate.

Примеры

В следующем примере кода показано, как использовать SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) для выбора единственного элемента массива, удовлетворяющего условию.The following code example demonstrates how to use SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) to select the only element of an array that satisfies a condition.

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.
MsgBox("First array: " & fruit1)

В следующем примере кода показано, SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) что возвращает значение по умолчанию, если последовательность не содержит ровно один элемент, удовлетворяющий условию.The following code example demonstrates that SingleOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) returns a default value when the sequence does not contain exactly one element that satisfies the condition.

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)
MsgBox("Second array: " & output)

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

Комментарии

Значение по умолчанию для ссылочных и допускающих значения NULL типов равно null.The default value for reference and nullable types is null.

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