【问题标题】:C# Catching exceptionC# 捕获异常
【发布时间】:2013-07-22 12:19:08
【问题描述】:

我对此很陌生,所以请帮忙。 我有以下图片点击代码。 但是,如果用户不单击图像,则会发生错误。 如果用户没有单击图像并尝试继续,我如何进行错误检查以捕捉到,会显示一个消息框,通知他单击图像。

错误消息:错误位于“ListViewItem selectedItem = listView1.SelectedItems[0] 错误消息:无效参数 = '0' 的值对 'index 无效

下面是我的代码:

private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    int i = e.ProgressPercentage;
    object fbUserObject = e.UserState;
    if (fbUserObject is DataRow)
    {
        var fbUser = fbUserObject as DataRow;
        var item = new ListViewItem(fbUser["friend_name"].ToString());
        item.Tag = fbUser["friend_id"];
        item.ImageIndex = i;
        listView1.Items.Add(item);
    }
    else if (fbUserObject is Image)
    {
        imageList.Images.Add(fbUserObject as Image);
    }  
}

private void imageClicked(Object sender, System.EventArgs e)
{
    ListViewItem selectedItem = listView1.SelectedItems[0];
    selectedFBId = selectedItem.Tag as string;
    selectedFBName = selectedItem.Text;

    DialogResult dialogA = MessageBox.Show("Analyse employee data?", "SOC", MessageBoxButtons.YesNo);
    if (dialogA == DialogResult.Yes)
    {
        TargetEmployee.Text = "Selected Target: " + selectedFBName;
        pf.Show();
        ThreadPool.QueueUserWorkItem(LoadUserDetails);
    }
}

【问题讨论】:

  • 异常发生在哪里?在 LoadUserDetails 的实现中?
  • 异常不需要捕获,需要在item为null时处理
  • 哪一行出错了?
  • 错误在“ListViewItem selectedItem = listView1.SelectedItems[0]
  • 错误出现在“ListViewItem selectedItem = listView1.SelectedItems[0] 错误消息:无效参数 = '0' 的值对 'index' 无效

标签: c#


【解决方案1】:

你不应该捕获异常,你应该在没有任何选定项时处理

if(listView1.SelectedItems.Count == 0)
{
 MessageBox.Show(this, "No image");
return;
}

当您不希望发生某些事情时应该捕获异常,如果您意识到可能的问题,您应该在它成为问题之前处理它

【讨论】:

  • (返回退出你的方法)
  • 感谢您的帮助。 ;)
【解决方案2】:

像这样改变你的代码

 private void imageClicked(Object sender, System.EventArgs e)
    {
        if(listView1.SelectedItems.Count < 1)
                return;
        ListViewItem selectedItem = listView1.SelectedItems[0];
        selectedFBId = selectedItem.Tag as string;
        selectedFBName = selectedItem.Text;

        DialogResult dialogA = MessageBox.Show("Analyse employee data?", "SOC", MessageBoxButtons.YesNo);
        if (dialogA == DialogResult.Yes)
        {
            TargetEmployee.Text = "Selected Target: " + selectedFBName;
            pf.Show();
            ThreadPool.QueueUserWorkItem(LoadUserDetails);
        }
    }

【讨论】:

  • 错误出现在“ListViewItem selectedItem = listView1.SelectedItems[0] 错误消息:无效参数 = '0' 的值对 'index 无效
  • @SamuelLee 你应该应用我上面在我的代码中提到的检查 if(listView1.SelectedItems.Count
【解决方案3】:

您可以使用try { } catch { } 语句进行错误处理。

一旦找到产生异常的代码行,就可以将其包装成这样的块

try
{
   int a = int.Parse("pedantic"); // This throws an error because you cannot convert
}
catch (Exception e)
{
   // Handle your error here instead of crashing your program
}

【讨论】:

  • 那甚至不能编译(“除以常数零”)
  • @Sayse 他刚刚给出了一个如何处理异常的示例。他也对此发表了评论。
  • @EhsanUllah - 我只是很挑剔,通常应该编译示例,以便 OP 可以在需要时尝试它们,如果我更挑剔,我会说一些关于捕捉 Exception 但是我可以看到 SLC 正在尝试做什么。我已经在我的其他评论中说明了为什么我认为这也不正确
  • 是的,但编译器可能会优化它,因为它没有被使用;)
猜你喜欢
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 2016-11-11
  • 2018-11-29
  • 2011-07-02
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多