Je voulais suivre quelques excellents conseils C de du calcul de la longueur du tableau une fois, puis en utilisant une valeur sans avoir à appeler une fonction comme ceci:Pourquoi Array.Length et Array.Count() ne peuvent-ils pas être affectés à des valeurs const?
Au lieu de:
for(int i = 0; i < arr.length; ++i)
J'écris
const int size = arr.length; // or arr.Count()
for(int i = 0; i < size; ++i)
Après avoir lu un thread différent (Is it costly to do array.length or list.count in a loop) j'ai remarqué que le gain de performance est discutable et que c'est du C# et pas du C++.
La deuxième raison est d'initialiser mon tableau avec une valeur:
const int size = arr.Length;
int[] primes_ = new int[size];
Alors ma question est la suivante:
Pourquoi ne puis-je déclarer toute façon ? Il me crache l'erreur:
Error 2 The expression being assigned to 'length' must be constant
Ce qui est très déroutant parce que ma valeur est constante. Cependant, quand j'enlève le const
, poof va le message. ...Quelle?
L'initialisation de longueur se lit:
public int Length {get;}
de MSDN. Ce qui est particulièrement déroutant parce que ma dernière question (Get-Set Accessor functionality differs on existence of get-set keyword) m'a donné explicitement la réponse de "Il n'est pas possible de déclarer seulement obtenir et laisser ensemble absent."
Je ne comprends pas pourquoi je peux déclarer int size = arr.Length
, mais pas const int size = arr.Length
. Pourquoi cela est-il ainsi?
Ceci est un dup de questions. La réponse simple est const dans C# signifie la constante de temps de compilation et non pas comme dans C++ où cela signifie assigner une fois –