2013-04-26 3 views
0

Je veux retourner une version copiée d'une liste donnée, dans laquelle chaque élément est multiplié par un scalaire.Retourne la liste copiée et multipliée

... 
int attenuation = 3; 
return new List<double>(VoltsPerDivX1.Select(x => x*attenuation)); 

VoltsPerDivX1 est une liste existante de type List<double>. Est-ce la bonne façon ou y en a-t-il de meilleurs?

Répondre

5

Ceci est un peu plus idiomatiques:

return VoltsPerDivX1.Select(x => x * attenuation).ToList(); 

Il se comporte aussi bien si votre appel Select(...) émet un type anonyme. Dans votre exemple, vous devez être capable d'exprimer le type de la liste pour l'appel du constructeur. Si vous deviez faire quelque chose comme:

return VoltsPerDivX1 
    .Select(x => new { original = x, attenuated = x * attenuation }) 
    .ToList(); 

le type de paramètre de la liste ne peut pas être exprimé puisque le type est anonyme. C'est probablement une bonne habitude (si vous devez absolument forcer l'évaluation d'un IEnumerable, et assurez-vous de poser cette question) pour utiliser .ToList(). Il y a aussi .ToArray().

Questions connexes