Fonctionne sur C# 3.0:
IEnumerable<int> myRange = Enumerable.Range(1, 10);
Modifier s'il vous Plaît, gardez à l'esprit que:
- Il n'existe pas (immédiate) de performances en utilisant que - c'est Linq, de sorte que l'exécution est différée.
- Il existe des méthodes comme l'
Min
et Max
déjà disponibles.
-
IEnumerable
expose également à des méthodes comme Contains
, Intersect
et Union
- donc les distances ne peuvent pas seulement être interrogés, ils peuvent également être combinés.
-
Il y a des gens qui utilisent déjà ce pour représenter les plages (plutôt que de simplement les énumérer sur une collection de nombres entiers).
Bien sûr, si par "stocker" l'OP est seulement inquiété de la persistance des données (par opposition à la représentation des données), il pourrait utiliser un simple DTO avec deux champs de type entier.
Encore, il demande "Est-il un type existant pour qu'en C# 4.0?" - et je crois que la réponse est oui, il est, et il est appelé IEnumerable<int>
.
Edit 2
Aussi garder à l'esprit qu' Enumerable.Range
peut avoir vraiment de la mauvaise performance.
C'est sans doute que la plupart des troubles de la downvoters de cette réponse: il y a usecases où Enumerable.Range
n'est pas une option pratique.
Encore, je crois que les éléments suivants doivent également être considérés:
- Qu'il est sémantiquement un son moyen de représenter un nombre entier de gamme.
- Qu'il peut être utilisé pour de petites plages sans notable des performances.
- Que le problème est accidentelle, le sens qu'il est parfaitement possible de retourner un
IEnumerable<int>
qui est en mesure d'être interrogé en contre, sans avoir à parcourir l'ensemble de la gamme.
Concernant le 3ème point, cette bibliothèque implémente un Sequence.Create
méthode d'extension. Il fonctionne de façon similaire à l' Enumerable.Range
et renvoie également un IEnumerable<int>
, mais il est censé être plus efficace.