Enumerable.FirstOrDefault Enumerable.FirstOrDefault Enumerable.FirstOrDefault Enumerable.FirstOrDefault Method

定義

傳回序列的第一個項目;如果找不到任何項目,則傳回預設值。Returns the first element of a sequence, or a default value if no element is found.

多載

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

傳回序列中符合條件的第一個元素;如果找不到這類元素,則傳回預設值。Returns the first element of the sequence that satisfies a condition or a default value if no such element is found.

FirstOrDefault<TSource>(IEnumerable<TSource>) FirstOrDefault<TSource>(IEnumerable<TSource>) FirstOrDefault<TSource>(IEnumerable<TSource>) FirstOrDefault<TSource>(IEnumerable<TSource>)

傳回序列的第一個元素;如果序列中沒有包含任何元素,則傳回預設值。Returns the first element of a sequence, or a default value if the sequence contains no elements.

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

傳回序列中符合條件的第一個元素;如果找不到這類元素,則傳回預設值。Returns the first element of the sequence that satisfies a condition or a default value if no such element is found.

public:
generic <typename TSource>
[System::Runtime::CompilerServices::Extension]
 static TSource FirstOrDefault(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, bool> ^ predicate);
public static TSource FirstOrDefault<TSource> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,bool> predicate);
static member FirstOrDefault : seq<'Source> * Func<'Source, bool> -> 'Source
<Extension()>
Public Function FirstOrDefault(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 an element from.

predicate
Func<TSource,Boolean>

用來測試每個項目是否符合條件的函式。A function to test each element for a condition.

傳回

TSource TSource TSource TSource

如果 TSource 是空的,或是沒有任何項目通過 source 所指定的測試,則為 default(predicate),否則為 source 中通過 predicate 指定之測試的第一個項目。default(TSource) if source is empty or if no element passes the test specified by predicate; otherwise, the first element in source that passes the test specified by predicate.

例外狀況

sourcepredicatenullsource or predicate is null.

範例

下列程式碼範例示範如何使用FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>)傳遞述詞中。The following code example demonstrates how to use FirstOrDefault<TSource>(IEnumerable<TSource>, Func<TSource,Boolean>) by passing in a predicate. 在第二個方法呼叫中,沒有任何項目中符合條件的陣列。In the second call to the method, there is no element in the array that satisfies the condition.

string[] names = { "Hartono, Tommy", "Adams, Terry", 
                     "Andersen, Henriette Thaulow", 
                     "Hedlund, Magnus", "Ito, Shu" };

string firstLongName = names.FirstOrDefault(name => name.Length > 20);

Console.WriteLine("The first long name is '{0}'.", firstLongName);

string firstVeryLongName = names.FirstOrDefault(name => name.Length > 30);

Console.WriteLine(
    "There is {0} name longer than 30 characters.",
    string.IsNullOrEmpty(firstVeryLongName) ? "not a" : "a");

/*
 This code produces the following output:

 The first long name is 'Andersen, Henriette Thaulow'.
 There is not a name longer than 30 characters.
*/
' Create an array of strings.
Dim names() As String =
{"Hartono, Tommy", "Adams, Terry", "Andersen, Henriette Thaulow", "Hedlund, Magnus", "Ito, Shu"}

' Select the first string in the array whose length is greater than 20.
Dim firstLongName As String =
names.FirstOrDefault(Function(name) name.Length > 20)

' Display the output.
MsgBox("The first long name is " & firstLongName)

' Select the first string in the array whose length is greater than 30,
' or a default value if there are no such strings in the array.
Dim firstVeryLongName As String =
names.FirstOrDefault(Function(name) name.Length > 30)

Dim text As String = IIf(String.IsNullOrEmpty(firstVeryLongName), "not a", "a")

MsgBox("There is " & text & " name longer than 30 characters.")

' This code produces the following output:
'
' The first long name is Andersen, Henriette Thaulow
'
' There is not a name longer than 30 characters.

備註

參考和可為 null 類型的預設值是nullThe default value for reference and nullable types is null.

FirstOrDefault<TSource>(IEnumerable<TSource>) FirstOrDefault<TSource>(IEnumerable<TSource>) FirstOrDefault<TSource>(IEnumerable<TSource>) FirstOrDefault<TSource>(IEnumerable<TSource>)

傳回序列的第一個元素;如果序列中沒有包含任何元素,則傳回預設值。Returns the first element of a sequence, or a default value if the sequence contains no elements.

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

類型參數

TSource

source 項目的類型。The type of the elements of source.

參數

source
IEnumerable<TSource>

要傳回第一個項目的 IEnumerable<T>The IEnumerable<T> to return the first element of.

傳回

TSource TSource TSource TSource

如果 TSource 是空的,則為 default(source),否則為 source 中的第一個項目。default(TSource) if source is empty; otherwise, the first element in source.

例外狀況

範例

下列程式碼範例示範如何使用FirstOrDefault<TSource>(IEnumerable<TSource>)上的空陣列。The following code example demonstrates how to use FirstOrDefault<TSource>(IEnumerable<TSource>) on an empty array.

int[] numbers = { };
int first = numbers.FirstOrDefault();
Console.WriteLine(first);

/*
 This code produces the following output:

 0
*/
' Create an empty array.
Dim numbers() As Integer = {}

' Select the first element in the array, or a default value
' if there are not elements in the array.
Dim first As Integer = numbers.FirstOrDefault()

' Display the output.
MsgBox(first)

' This code produces the following output:
'
' 0

有時值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. 然後,呼叫First<TSource>(IEnumerable<TSource>)取得第一個項目。Then, call First<TSource>(IEnumerable<TSource>) to obtain the first element. 下列程式碼範例會使用這兩種技術以取得預設值為 1,如果數字月份的集合是空的。The following code example uses both techniques to obtain a default value of 1 if a collection of numeric months is empty. 整數,預設值為 0,這未對應至任何月份,因為預設值必須被指定為 1。Because the default value for an integer is 0, which does not correspond to any month, 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.

List<int> months = new List<int> { };

// Setting the default value to 1 after the query.
int firstMonth1 = months.FirstOrDefault();
if (firstMonth1 == 0)
{
    firstMonth1 = 1;
}
Console.WriteLine("The value of the firstMonth1 variable is {0}", firstMonth1);

// Setting the default value to 1 by using DefaultIfEmpty() in the query.
int firstMonth2 = months.DefaultIfEmpty(1).First();
Console.WriteLine("The value of the firstMonth2 variable is {0}", firstMonth2);

/*
 This code produces the following output:

 The value of the firstMonth1 variable is 1
 The value of the firstMonth2 variable is 1
*/
Dim months As New List(Of Integer)(New Integer() {})

' Setting the default value to 1 after the query.
Dim firstMonth1 As Integer = months.FirstOrDefault()
If firstMonth1 = 0 Then
    firstMonth1 = 1
End If
MsgBox(String.Format("The value of the firstMonth1 variable is {0}", firstMonth1))

' Setting the default value to 1 by using DefaultIfEmpty() in the query.
Dim firstMonth2 As Integer = months.DefaultIfEmpty(1).First()
MsgBox(String.Format("The value of the firstMonth2 variable is {0}", firstMonth2))

' This code produces the following output:
'
' The value of the firstMonth1 variable is 1
' The value of the firstMonth2 variable is 1

備註

參考和可為 null 類型的預設值是nullThe default value for reference and nullable types is null.

FirstOrDefault方法不會提供方法來指定預設值。The FirstOrDefault 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.

適用於