C# 索引超出了数组的边界。抓住错误
所以我的代码运行良好,一切正常。但是当textbox1和textbox2中没有任何内容并且我点击submit按钮时,我收到的错误索引超出了数组的界限。抓住一个错误 然而,我尝试输入一个else来捕获错误,并将标签更改为“找不到”,而不是服务器错误,但它不工作,这是为什么 这是我的密码:C# 索引超出了数组的边界。抓住错误,c#,asp.net,C#,Asp.net,所以我的代码运行良好,一切正常。但是当textbox1和textbox2中没有任何内容并且我点击submit按钮时,我收到的错误索引超出了数组的界限。抓住一个错误 然而,我尝试输入一个else来捕获错误,并将标签更改为“找不到”,而不是服务器错误,但它不工作,这是为什么 这是我的密码: protected void Button1_Click(object sender, EventArgs e) { string CustomerID = TextBox2.Text; //
protected void Button1_Click(object sender, EventArgs e)
{
string CustomerID = TextBox2.Text;
// 1off
WebReference.WebServiceTyped ws = new WebReference.WebServiceTyped();
WebReference.CheckPartStatus PQ = new WebReference.CheckPartStatus();
string Parts = "";
string PartNumber = Parts;
string PriceSum = null;
long QtySum = 0;
PartNumber = TextBox1.Text;
if (PartNumber == TextBox1.Text)
{
PQ = ws.CheckPartNumberStatus(PartNumber, CustomerID, "1,6,8,9,112", "", "", "");
PriceSum = String.Format(PQ.Parts[0].Cost.ToString(), "####.00");
Label1.Text = PriceSum;
}
else
{
Label1.Text = "Cannot Find";
}
}
}
你有这一行:
PartNumber = TextBox1.Text;
紧接着是:
if (PartNumber == TextBox1.Text)
如果您只是将该值设置为PartNumber
,则该值始终为真。因此,您永远不会输入else
语句
您应该做的是在使用前检查PQ
中是否有任何内容:
if (PQ.Parts.Length>0)
{
PriceSum = String.Format(PQ.Parts[0].Cost.ToString(), "####.00");
Label1.Text = PriceSum;
}
else
{
Label1.Text = "Cannot Find";
}
这将捕获许多问题:错误的客户id或错误的零件号可能当CustomerId中没有声明文本时,CheckPartNumberStatus失败,请尝试捕获空输入,如下所示:
string CustomerID = TextBox2.Text;
if(CustomerId == string.Empty){
//error display
return;
}
PartNumber=TextBox1.Text;如果(PartNumber==TextBox1.Text){
…这肯定毫无意义。您将TextBox1.Text
分配给PartNumber
,然后立即检查它们是否相等???您应该更明确地说明“它不起作用”的含义。也就是说,您永远不会进入else
子句,因为if
表达式只是比较一个变量和刚刚用于分配给该变量的属性。可以保证它们始终相等。最简单的方法是检查文本框值,查找如何使用字符串。IsNullOrEmpty
函数如果主代码块中有条件的检查,则无需添加即可省去很多麻烦。如果先检查..或者如果两个文本框长度均为=0,则最好添加一些错误弹出的消息框
开始使用调试器,远离旧的方法