2010-10-09 6 views
6

Comment vérifier le tableau true_or_false contenant la valeur false?vérifier si le tableau contient false?

bool[] true_or_false = new bool[10]; 

for (int i = 0; i < txtbox_and_message.Length; i++) 
{ 
    bool bStatus = true; 
    if (txtbox_and_message[i] == "") 
    { 
    bStatus = false; 
    } 
    true_or_false[i] = bStatus;       
} 
+0

Que fait la boucle? On dirait qu'il vérifie le texte vide (à plusieurs reprises) et définit * tous * les éléments soit vrai, soit faux si la chaîne est vide? – PaulG

+1

Est-ce que 'bStatus' ne devrait pas dépendre de' i'? C'est pourquoi PaulG dit correctement que tous les éléments sont les mêmes. –

+0

duplication possible de [renvoyer des booléens dans une méthode C#] (http://stackoverflow.com/questions/3852078/returning-booleans-in-a-c-method) –

Répondre

15

Si elles ne sont pas tout à fait vrai, alors au moins un est faux.

Par conséquent:

!true_or_false.All(x => x) 

Docu: http://msdn.microsoft.com/en-us/library/bb548541.aspx

EDIT: la version 2.0 .NET, comme l'a demandé:

!Array.TrueForAll(true_or_false, delegate (bool x) { return x; }) 

ou

Array.Exists(true_or_false, delegate (bool x) { return !x; }) 

NOTE: J'ai été stayi ng loin du code absurde qui définit true_or_false, mais il se pourrait que ce que vous voulez est:

int emptyBox = Array.FindIndex(txtbox_and_message, string.IsNullOrEmpty); 

qui vous donnera -1 si toutes les chaînes ne sont pas vides, ou l'indice de la chaîne ne autrement .

+0

est-il travailler avec .net framework 2.0? –

+0

Non, la syntaxe de la méthode d'extension et la notation lambda pour le prédicat ont toutes deux besoin de C# 3, mais une version .NET 2 existe (voir modification). –

2

intead de votre code:

bool containsEmptyText = txtbox_and_message.Contains(t => t.Text ==String.Empty) 
11
return true_or_false.Any(p => !p); 
+0

est-il travailler avec. Net framework 2.0? –

+0

Malheureusement non, il faut 3.0 + – Homam

+3

@krunal: Si vous avez des restrictions de plate-forme, vous devriez les mettre dans la question. –

8
using System.Linq; 

alors:

true_or_false.Contains(false); 
+0

Je reçois cette erreur après l'ajout de System.Linq. Le type ou le nom d'espace de nommage 'Linq' n'existe pas dans l'espace de nommage 'System' (manque-t-il une référence d'assembly?) –

+0

@krunal: Quelle version du framework .NET utilisez-vous? – BoltClock

+0

Vous devez ajouter une référence dans votre projet à system.core dll – Nobody

2

Il y a deux solutions:

Solution 1: faire une boucle après boucle pour vérifier si le true_or_false contient faux comme ceci:

si vous voulez réaliser cela sans trucs de fantaisie, et que vous voulez programmer le code vous-même que vous pouvez faire ceci:

bool containsFalse = false; 
for(int j = 0; j < true_or_false.Length; j++) 
{ 
    //if the current element the array is equals to false, then containsFalse is true, 
    //then exit for loop 
    if(true_or_false[j] == false){ 
     containsFalse = true; 
     break; 
    } 
} 

if(containsFalse) { 
    //your true_or_false array contains a false then. 
} 

Solution 2:

!true_or_false.All(x => x); 

PK

+4

'== false' et' == true' doivent mourir. Sinon une bonne réponse +1. –

+3

Votre deuxième solution fonctionnerait mieux si vous utilisiez 'true_or_false.Any (x =>! X)' – mgbowen

+0

@nasufara: Sur quelle preuve basez-vous cette affirmation? Les deux 'Any' et' All' sont en court-circuit. Si quoi que ce soit, le besoin d'appeler l'opérateur '!' (Boolean NOT) une seule fois devrait rendre 'All' plus rapide, mais la différence est presque certainement trop petite pour être mesurée. –

1

Si le .NET3.5+ vous pouvez utiliser System.Linq, puis vérifiez à l'aide Any:

// if it contains any false element it will return true 
true_or_false.Any(x => !x); // !false == true 

Si vous ne pouvez pas utiliser LINQ, vous avez d'autres choises:

Utilisation Array.Exists méthode statique: (comme Ben mentionné)

Array.Exists(true_or_false, x => !x); 

en utilisant List.Exists (vous devez convertir le tableau à une liste pour accéder à cette méthode)

true_or_falseList.Exists(x => !x); 

Vous devrez également parcourir la matrice.

foreach (bool b in true_or_false) 
{ 
    if (!b) return true; // if b is false return true (it contains a 'false' element) 
} 
return false; // didn't find a 'false' element 

connexes


et l'optimisation de votre code:

bool[] true_or_false = new bool[10]; 

for (int i = 0; i < txtbox_and_message.Length; i++) 
{ 
    true_or_false[i] = !String.IsNullOrEmpty(txtbox_and_message[i]); 
} 
+0

Pourquoi cherchez-vous 'List.Exists' au lieu de' Array.Exists'? –

Questions connexes