F # a des séquences qui permettent de créer des séquences:
seq { 0 .. 10 }
Créez une séquence de nombres de 0 à 10.
Y a-t-il quelque chose de similaire en C #?
Vous pouvez utiliser Enumerable.Range(0, 10);
. Exemple:
var seq = Enumerable.Range(0, 10);
MSDN page ici .
Enumerable.Range(0, 11);
Génère une séquence de nombres entiers dans une plage spécifiée.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Vous pouvez créer une fonction simple. Cela fonctionnerait pour une séquence plus compliquée. Sinon, la Enumerable.Range
devrait faire.
IEnumerable Sequence(int n1, int n2) { while (n1 <= n2) { yield return n1++; } }
Ma mise en œuvre:
private static IEnumerable Sequence(int start, int end) { switch (Math.Sign(end - start)) { case -1: while (start >= end) { yield return start--; } break; case 1: while (start <= end) { yield return start++; } break; default: yield break; } }
Si vous voulez énumérer une séquence de nombres ( IEnumerable
) de 0
à une end
variable, essayez
Enumerable.Range(0, ++end);
Dans l’explication, pour obtenir une séquence de nombres de 0 à 1000, vous voulez que la séquence commence à 0 (en vous rappelant qu’il y a 1001 nombres entre 0 et 1000 inclus).
Si vous voulez une série linéaire illimitée, vous pouvez écrire une fonction comme
IEnumerable Series(int k = 0, int n = 1, int c = 1) { while (true) { yield return k; k = (c * k) + n; } }
que vous pourriez utiliser comme
var ZeroTo1000 = Series().Take(1001);
Si vous voulez une fonction que vous pouvez appeler à plusieurs resockets pour générer des nombres incrémentiels, vous voudrez peut-être quelque chose comme.
using System.Threading; private static int orderNumber = 0; int Seq() { return Interlocked.Increment(ref orderNumber); }
Lorsque vous appelez Seq()
il renvoie le numéro de commande suivant et incrémente le compteur.