Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Enumerable.SingleOrDefault<TSource>(IEnumerable<TSource>)

 

Publicado: octubre de 2016

Devuelve el único elemento de una secuencia o un valor predeterminado si la secuencia está vacía; Este método produce una excepción si hay más de un elemento en la secuencia.

Espacio de nombres:   System.Linq
Ensamblado:  System.Core (en System.Core.dll)

public static TSource SingleOrDefault<TSource>(
	this IEnumerable<TSource> source
)

Parámetros

source
Type: System.Collections.Generic.IEnumerable<TSource>

Un IEnumerable<T> para devolver el único elemento.

Valor devuelto

Type: TSource

El único elemento de la secuencia de entrada o default(TSource) si la secuencia no contiene elementos.

Parámetros de tipo

TSource

Tipo de los elementos de source.

Exception Condition
ArgumentNullException

El valor de source es null.

InvalidOperationException

La secuencia de entrada contiene más de un elemento.

El valor predeterminado de referencia y tipos que aceptan valores NULL es null.

El SingleOrDefault método proporciona una manera de especificar un valor predeterminado. Si desea especificar un valor predeterminado distinto de default(TSource), utilice la DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) método tal como se describe en la sección ejemplo.

En el ejemplo de código siguiente se muestra cómo utilizar SingleOrDefault<TSource>(IEnumerable<TSource>) para seleccionar el único elemento de una matriz.

string[] fruits1 = { "orange" };

string fruit1 = fruits1.SingleOrDefault();

Console.WriteLine(fruit1);

/*
 This code produces the following output:

 orange
*/

En el ejemplo de código siguiente se muestra que SingleOrDefault<TSource>(IEnumerable<TSource>) devuelve un valor predeterminado cuando la secuencia no contiene exactamente un elemento.

string[] fruits2 = { };

string fruit2 = fruits2.SingleOrDefault();

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

/*
 This code produces the following output:

 No such string!
*/

A veces el valor de default(TSource) no es el valor predeterminado que se va a utilizar si la colección no contiene elementos. En lugar de comprobar el resultado para el valor predeterminado no deseado y, a continuación, cámbielo si es necesario, puede usar el DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) para especificar el valor predeterminado que se va a utilizar si la colección está vacía. A continuación, llame a Single<TSource>(IEnumerable<TSource>) para obtener el elemento. En el ejemplo de código siguiente se utiliza ambas técnicas para obtener el valor predeterminado 1 si una colección de números de página está vacía. Dado que el valor predeterminado de un entero es 0, que no es normalmente un número de página válido, el valor predeterminado debe especificarse como 1. Después de la consulta ha terminado de ejecutarse, se comprueba la primera variable del resultado para el valor predeterminado no deseado. La segunda variable del resultado se obtiene mediante DefaultIfEmpty<TSource>(IEnumerable<TSource>, TSource) para especificar un valor predeterminado de 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
*/

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 3.5
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: