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

如果 source 为空或没有元素通过 predicate 指定的测试,则为 default(TSource),否则为 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

如果 source 为空,则为 default(TSource);否则为 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.

适用于