2010-10-19 4 views
4
List<Double> constants = new ArrayList<Double>() {{ 
      add(1.4); 
      add(0.4); 
      add(1.2); 
      add(2.4); 
      add(4.2); 
      add(5); 
      add(6.0); 
      add(7.0);   
      }}; 

Répondre

17

En C# 3.0 ou plus,

var constants = new List<double> { 1.4, 0.4, 1.2, 2.4, 4.2, 5D, 6D, 7D }; 

constants est implicitly typed-List<double> avec le mot-clé var. La liste est initialisée (en mettant les nombres entre accolades) en utilisant la syntaxe collection-initializer.

Cela équivaut à (C# 2.0 ou plus):

List<double> constants = new List<double>(); 
constants.Add(1.4); 
constants.Add(0.4); 
constants.Add(1.2); 
constants.Add(2.4); 
constants.Add(4.2); 
constants.Add(5D); 
constants.Add(6D); 
constants.Add(7D); 

Vous pouvez laisser les D s, mais je préfère être explicite avec les littéraux numériques. Sur une autre note, si cela représentait réellement une liste de constantes sans nom, il serait bon d'utiliser une collection immuable telle que ReadOnlyCollection<T>. Par exemple:

var constants = new List<double>{1.4, 0.4, 1.2, 2.4, 4.2, 5, 6, 7}.AsReadOnly(); 
+0

Vous n'avez pas besoin de le faire 5D, il est inféré. –

+1

@Yuriy: Non, ce n'est pas inféré. C'est implicitement converti. – SLaks

+1

@SLaks Je suis corrigé. –

2
List<double> constants = new List<double>() { 1.4, 0.4, 1.2, 2.4, 4.2, 5, 6, 7 }; 
7

Comme ceci:

List<Double> constants = new List<Double>() { 1.4, 0.4, ... }; 

Il utilise une nouvelle fonctionnalité dans C# 3.0.

Si vous utilisez encore VS2005, vous pouvez écrire

List<Double> constants = new List<Double>(new double[] { 1.4, 0.4, ... }); 

Ce n'est pas tout à fait la même chose.

La première ligne est transformée par le compilateur en une série d'appels Add sur la liste.

La deuxième ligne crée un tableau double[] et le transmet au constructeur List<T>, qui le copie dans la liste.

4

Ce qui précède est simplement une initialisation de la liste statique, l'équivalent en C# serait:

new List<Double>(){ 1.4, 0.4 } 

Notez que le code Java ci-dessus crée en fait une nouvelle classe interne qui est une sous-classe de ArrayList, et puis l'initialise. Vous ne devriez normalement pas vous inquiéter à ce sujet, mais cela vaut la peine de le savoir (il aura un pointeur implicite this et provoquera des maux de tête lors de la sérialisation)

+0

+1 pour la sous-classe – Ishtar

1

L'utilisation d'une classe interne n'est probablement pas la meilleure façon de le faire en Java. Vous voudrez probablement faire quelque chose comme

List<Double> constants = Arrays.asList(new Double[]{1.4,0.4,1.2,2.4,4.2,5.0,6.0,7.0});