2011-02-10 11 views
15

¿C# ofrece algún buen método para convertir una sola entidad del tipo T en IEnumerable<T>?¿Cómo puedo crear un singlete IEnumerable?

La única manera que puedo pensar es algo así como:

T entity = new T(); 
IEnumerable<T> = new List { entity }.AsEnumerable(); 

y supongo que debe haber una mejor manera.

+3

posible duplicado: http://stackoverflow.com/questions/4779442/return-single-instance-object-as-ienumerable – Justin

+0

posible duplicado de [El paso de un solo elemento como IEnumerable ] (http://stackoverflow.com/questions/1577822/passing-a-single-item-as-ienumerablet) – nawfal

Respuesta

21

Su llamada a AsEnumerable() es innecesaria. AsEnumerable se usa generalmente en casos donde el objeto de destino implementa IQueryable<T> pero desea obligarlo a usar LINQ-to-Objects (cuando se hace un filtrado del lado del cliente en un ORM compatible con LINQ, por ejemplo). Dado que List<T> implementa IEnumerable<T> pero no IQueryable<T>, no es necesario.

De todos modos, también podría crear una matriz de elemento único con su artículo;

IEnumerable<T> enumerable = new[] { t }; 

O Enumerable.Repeat

IEnumerable<T> enumerable = Enumerable.Repeat(t, 1); 
+0

Notas: la sintaxis del constructor de matriz es significativamente más eficiente (pero dicha micro-optimización a menudo no es relevante); Por otro lado, se garantiza que el método de repetición sea inmutable. –

+1

Me gusta que Enumerable.Repeat te permite ocultar el tipo de respaldo. Además, supongo que Sprague

+0

@Sprague: si por "ocultar el tipo de respaldo", se refiere a la capacidad de llamar a 'Repetir' sin especificar explícitamente los argumentos genéricos, entonces la sintaxis de matriz implícita (' new [] {t} ') hace lo mismo cosa. –

5

utilizo

Enumerable.Repeat(entity, 1); 
4
var entity = new T(); 
var singleton = Enumerable.Repeat(entity, 1); 

(Aunque probablemente me acabo de hacer var singleton = new[] { entity }; en la mayoría de las situaciones, especialmente si era sólo para uso privado.)

+0

Extrañamente VB.NET es menos detallado que C#! La creación de la matriz es simplemente '{entidad}'. –

+2

@Martinho: en C# puedes hacer 'T [] x = {y}' o 'var x = new [] {y}', pero no 'var x = {y}'. – LukeH

Cuestiones relacionadas