Enumerable.SingleOrDefault 方法

定義

傳回序列的單一特定項目;如果找不到該項目,則傳回預設值。Returns a single, specific element of a sequence, or a default value if that element is not found.

多載

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>)

傳回序列中符合指定之條件的唯一一個元素,如果沒有這類元素,則為預設值,如果有一個以上的元素符合條件,這個方法就會擲回例外狀況。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>)

傳回序列的唯一一個項目,如果序列是空白,則為預設值,如果序列中有一個以上的項目,這個方法就會擲回例外狀況。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

輸入序列的單一項目;如果序列沒有包含任何項目,則為 default(TSource)。The single element of the input sequence, or default(TSource) if the sequence contains no elements.

例外狀況

sourcenullsource 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

備註

Reference 和 nullable 類型的預設值為 nullThe default value for reference and nullable types is null.

@No__t-0 方法不會提供指定預設值的方式。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>)

傳回序列中符合指定之條件的唯一一個元素,如果沒有這類元素,則為預設值,如果有一個以上的元素符合條件,這個方法就會擲回例外狀況。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

輸入序列中符合條件的單一項目;如果找不到這類項目,則為 default(TSource)。The single element of the input sequence that satisfies the condition, or default(TSource) if no such element is found.

例外狀況

sourcepredicatenullsource 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

備註

Reference 和 nullable 類型的預設值為 nullThe default value for reference and nullable types is null.

適用於