我正在编写一些错误检查,并尝试使用布尔数组在元素中存储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();
}
}
答案 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声称这不是最好的方法是正确的。如果您想知道更多,我会很乐意进一步讨论。