проверить, содержит ли массив false? - PullRequest
6 голосов
/ 10 октября 2010

Как проверить массив true_or_false, содержащий значение 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;                           
}

Ответы [ 6 ]

15 голосов
/ 10 октября 2010

Если они не все истинны, то по крайней мере один является ложным.

Следовательно:

!true_or_false.All(x => x)

Документ: http://msdn.microsoft.com/en-us/library/bb548541.aspx

РЕДАКТИРОВАТЬ: .NET 2.0версия, в соответствии с запросом:

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

или

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

ПРИМЕЧАНИЕ: я держался подальше от бессмысленного кода, который устанавливает true_or_false, но это может быть то, что вы хотитеэто:

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

, который даст вам -1, если все строки не пустые, или индекс ошибочной строки в противном случае.

11 голосов
/ 10 октября 2010
return true_or_false.Any(p => !p);
8 голосов
/ 10 октября 2010
using System.Linq;

затем:

true_or_false.Contains(false);
2 голосов
/ 10 октября 2010

Существует несколько решений:

Решение 1: выполните цикл for после этого для цикла for, чтобы проверить, содержит ли true_or_false значение false, например:

Вы хотите достичь этого без хитрых уловок, и вы хотите программировать код самостоятельно, вы можете сделать это:

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.
}

Решение 2:

!true_or_false.All(x => x);

PK

2 голосов
/ 10 октября 2010

Intead вашего кода:

bool containsEmptyText = txtbox_and_message.Contains( t => t.Text ==String.Empty)
1 голос
/ 10 октября 2010

Если на .NET3.5 + вы можете использовать System.Linq, а затем проверить с помощью Any:

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

Если вы не можете использовать Linq, то выесть другие варианты:

Использование Array.Exists статический метод: (как упоминал Бен)

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

Использование List.Exists (вам придется преобразовать массив всписок для доступа к этому методу)

true_or_falseList.Exists(x => !x);

Или вам нужно будет выполнить итерацию по массиву.

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

Related


И оптимизируем ваш код:

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]);
}
...