2011-01-28 8 views
5

Me gustaría que mi índice para iniciar a partir de un número de recuento superior a 0 mientras se hace algo como esto:Índice en la Selección de proyección

var dataSource = WebConfigurationHelper.GetSupportedDomainsString().Select((domain, index) => 
new { index , Name = domain }); 

así que mi salida se convierte en:

index=2 domain=zombieland 
index=3 domain=mydomain 

¿Es posible ¿que hacer?

Respuesta

9

Se puede ajustar en la Selección de proyección:

var dataSource = WebConfigurationHelper.GetSupportedDomainsString() 
    .Select((domain, index) => new { Index = index + 2, Name = domain }); 

La razón por la que mi sugerencia original de new { index + 2, Name = domain } no funcionaría es que un inicializador proyección (donde se especifica sólo una expresión, y dejar que el compilador inferir el nombre) solo funciona cuando la expresión es un "nombre simple", un "acceso de miembro" o un "acceso de base".

+0

Casi me sentí muy estúpido por preguntar, pero no lo había intentado - recibí un error de línea squigly "decorador de miembro anónimo no válido" pero luego funcionó: var dataSource = WebConfigurationHelper.GetSupportedDomainsString(). Select ((dominio, índice)) => nuevo {Índice = índice + 2, Nombre = dominio}); – dexter

+0

@Max: Ah sí, sería - editaré y explicaré :) –

+0

@Max Malygin: El compilador no deducirá un nombre de 'index + 2' para usted; tienes que nombrar explícitamente al miembro. – jason

Cuestiones relacionadas