2010-06-29 8 views

Répondre

0

Vous pouvez « sorte de » faire ce que vous voulez en utilisant la méthode Enumerable.Range:

if (Enumerable.Range(2, 8).Concat(new [] { 1, 12 }).Contains(number)) { 
    .... 
} 

Bien sûr, ce n'est pas presque aussi lisible que ce que vous trouvez dans une langue fonctionnelle de base ...

1

.NET 2.0 (qui est ce que cible VS 2005) n'a pas la notion de Set.

.NET 3.5 a introduit HashSet<T>, et .NET 4 a présenté SortedSet<T>.

Il n'y a pas une forme littérale pour eux si - bien que la collecte initializers fournissent quelque chose légèrement similaire:

new HashSet<int> { 1, 2, 4, 12 } 

Bien sûr, vous pouvez utiliser juste un tableau:

int[] values = { 1, 2, 5, 12 }; 

mais la plage partie de votre échantillon - 2..10 - n'existe pas dans aucune version de C#.

1

Malheureusement non.

Cependant, vous pouvez utiliser la méthode Contains() d'un List<int>:

List<int> numbers = ... 
if (numbers.Contains(2)) { ... } 

si numbers est un tableau, vous pouvez initialiser une nouvelle List<int> avec les valeurs de tableau:

int[] numbers = { 1, 2, 3, 4 }; 
List<int> newList = new List<int>(numbers); 
if (newList.Contains(2)) { ... } 

ou de l'utilisation Array.Exists():

Array.Exists(numbers, delegate(int i) { return i == 2; }); 
+0

Selon moi, il Linq n'était pas disponible en C# 2.0 (VS2005). – XIII

+0

Oh, tu as raison, j'ai raté le VS2005 ... –