2010-04-30 7 views
4

Je ne comprends pas comment fonctionne le code suivant. Plus précisément, je ne comprends pas l'utilisation de "return i < 3". Je m'attendrais à revenir i SI son < que 3. Je toujours que ce retour renvoie juste la valeur. Je ne pouvais même pas trouver quelle syntaxe est-ce.Prédire <int> répondre à la question

Deuxième question, il me semble utiliser la méthode anonyme (delegate (int i)) mais pourrait être possible de l'écrire avec un délégué normal pointant vers la méthode elsewere? Merci

List<int> listOfInts = new List<int> { 1, 2, 3, 4, 5 }; 
List<int> result = 
    listOfInts.FindAll(delegate(int i) { return i < 3; }); 
+1

La plupart d'entre nous préfèrent maintenant écrire le FindAll comme: 'listOfInts.FindAll (i => je <3); ' – Steven

Répondre

11

Non, return i < 3 n'est pas la même chose que if (i < 3) return;.

Au lieu de cela, il est équivalent à:

bool result = (i < 3); 
return result; 

En d'autres termes, il renvoie le résultat de i < 3 évalué. Donc, il retournera vrai si i est 2, mais faux si i est 10 par exemple.

Vous pouvez certainement écrire cela en utilisant une conversion de groupe Méthode:

List<int> listOfInts = new List<int> { 1, 2, 3, 4, 5 }; 
List<int> result = listOfInts.FindAll(TestLessThanThree); 

... 
static bool TestLessThanThree(int i) 
{ 
    return i < 3; 
} 
1

L'instruction return ne peut retourner une valeur comme vous le dites. Dans cet exemple, l'instruction i < 3 sera d'abord évaluée à true ou à false et la valeur booléenne sera renvoyée, elle ne retournera pas < 3, mais le résultat de l'équation.

1

Vous pouvez également écrire votre exemple en utilisant une expression lambda:

var listOfInts = new List<int> { 1, 2, 3, 4, 5 }; 
var result = listOfInts.FindAll(i => i < 3); 

Autres exemples intéressants:

var listOfInts = new List<int> { 1, 2, 3, 4, 5 }; 
var all = listOfInts.FindAll(i => true); 
var none = listOfInts.FindAll(i => false);