为什么C#尝试捕获实际捕获错误?

时间:2017-03-06 01:16:03

标签: c# asp.net visual-studio-2015 exception-handling try-catch

答案可能很简单,但下面是我的代码,我只是试图根据值设置ListBox选择。当值有效时,它可以正常工作。

try { Categories.SelectedValue = catString; }
catch (ArgumentOutOfRangeException ex) { MessageBox.Show("Out of range!"); }

如果catString值不存在,则不显示任何文本框提醒,我收到错误消息:

  

System.ArgumentOutOfRangeException:' Categories'有一个SelectedValue   这是无效的,因为它不存在于项目列表中。   参数名称:值

我一直试图抓住Exception,也尝试将SelectedValue设置为已知值,但在错误发生之前它还没有达到目标。实际的ListBox确实设置了defaultvalue。为什么不尝试赶上工作?

谢谢!

1 个答案:

答案 0 :(得分:1)

这是因为您设置所选值不是检查参数是否超出范围的实际点。这发生在ListBox内。您只是将属性设置为文本值。设置它时不会抛出实际的异常,但是当ListBox尝试在以后通过参数进行索引时抛出它。我不确定如何捕获该异常,但避免它的一般方法是永远不要让SelectedValue成为首先不在ListBox中的值。仅将SelectedValue设置为已知在ListBox

中的值

请参阅:https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.selectedvalue(v=vs.110).aspx

  

如果所选值不在可用值列表中并且执行了回发,则抛出ArgumentOutOfRangeException异常。以下示例显示如何在回发之前捕获无效值:

this.DropDownList1.Items.Add(new ListItem{ Text="Hello", Value="1" });
if(DropDownList1.Items.FindByValue("2") != null) {
    Response.Write("Found");
}
相关问题