检查布尔数组中的元素值 - C#

时间:2010-03-05 22:31:35

标签: c# arrays boolean

我正在编写一些错误检查,并尝试使用布尔数组在元素中存储true或false,然后我的最终条件解析存储的元素,以确定它在visual studio 2008中是否全部为真。一种更简单的方法来进行错误检查,但也可以学习如何利用数组。这是我到目前为止所拥有的

bool[] checker = new bool[1]; // declared array...I think

private void print_button_Click(object sender, EventArgs e)
{
  if (authorbox.Text == "")
  {
    MessageBox.Show("Author field empty", "Required Entry");
  }
  else
  {
    checker[0] = true; // assigning element to array correctly?
  }

  if (titlebox.Text == "")
  {
    MessageBox.Show("Title field Empty", "Required Entry");
  }
  else
  {
    checker[1] = true;
  }

  // The part I am having trouble with basically if any of my array elements are  
  // false don't execute printing. Else go ahead and print.
  if ()
  {
  }
  else 
  {
    printPreviewDialog1.Document = printDocument1;
    printPreviewDialog1.ShowDialog();
  }
}

6 个答案:

答案 0 :(得分:4)

如果您使用的是.NET 3.5,则可以使用Any和All来查看是否有任何布尔值为真,或者是否所有布尔都是真的:

if (checker.Any(x => x))

或:

if (checker.All(x => x))

此外,如果您想要一个包含两个布尔值的数组,则应使用new bool[2]而不是new bool[1]。但是使用List<bool>会更容易。

答案 1 :(得分:1)

这不是错误处理的理想方法,但您可以使用.Contains()方法。

if (checker.Contains(false))
{
   // Do Something
}
else 
{
   printPreviewDialog1.Document = printDocument1;
   printPreviewDialog1.ShowDialog();
}

答案 2 :(得分:1)

除了其他事情,你应该说

  bool[] checker = new bool[2];

如果你想要一个由2个元素组成的数组;)在这种特殊情况下,数组似乎没有多大意义,因为它会使事情变得模糊不清。你可以用一个布尔变量做同样的事情。

答案 3 :(得分:1)

而不是使用数组,只要检测到错误就会更容易退出方法:

private void print_button_Click(object sender, EventArgs e) {
  if (authorbox.Text == "") {
    MessageBox.Show("Author field empty", "Required Entry");
    return;
  }

  if (titlebox.Text == "") {
    MessageBox.Show("Title field Empty", "Required Entry");
    return;
  }

  printPreviewDialog1.Document = printDocument1;
  printPreviewDialog1.ShowDialog();
}

答案 4 :(得分:1)

使用布尔数组来累积单个go / no-go值是过度的。你可以使用更多有用的东西来获得数组。

最好简单地将中间检查的结果与值进行对比,然后检查是否为真/假:

public bool CheckControls()
{
    bool pass = true;
    pass &= !string.IsNullOrEmpty(authorbox.Text));
    pass &= !string.IsNullOrEmpty(titlebox.Text));
    // if any of these are empty then pass is to false and stays that way.
    return pass;
}

如果需要跟踪哪个中间测试失败,请考虑使用整数和预定义的2次幂常量。如果一切顺利,你在这里检查零。这允许您屏蔽返回的值并累积测试结果的任何组合。只要你的测试少于32(或64)。

    int AUTHORBOX = 2;
    int TITLEBOX = 4;
    int ISBNBOX = 8;
    int PRICEBOX = 16;

    public int AlternateCheck()
    {
        int temp = 0;
        temp += string.IsNullOrEmpty(authorbox.Text) ? AUTHORBOX : 0;
        temp += string.IsNullOrEmpty(titlebox.Text) ? TITLEBOX : 0;
        temp += string.IsNullOrEmpty(isbnbox.Text) ? ISBNBOX : 0;
        temp += string.IsNullOrEmpty(pricebox.Text) ? PRICEBOX : 0;
        return temp;
    }

答案 5 :(得分:0)

我很确定NebuSoft建议的Contains方法是LINQ扩展,因此在.NET 2.0中不可用。但是,您可以使用Array.IndexOf<T>方法,如下所示:

if (Array.IndexOf<bool>(checker, false) != -1)
{
    // some element in the array is false
}
else
{
    // no false in the array
}

然而,NebuSoft声称这不是最好的方法是正确的。如果您想知道更多,我会很乐意进一步讨论。