-1

我有一个搜索功能,在我第一次运行时效果很好。当我尝试添加新搜索时,程序关闭并显示错误消息:“markerat = listBoxSökResultat.SelectedItem.ToString().ToLower(); 对象引用未设置为对象的实例。NullReference。我尝试使用 if 和返回;但这似乎没有帮助。有人知道这里有什么问题吗?

private void buttonSökNamn_Click(object sender, EventArgs e)
        {

            listBox1.Items.Clear();
            var v = (from x in el.Descendants("recept")
                     where x.Element("namn").Value.ToLower().Contains(textBoxNamn.Text.ToLower())
                     select x);

            if (v == null)
            {
                MessageBox.Show("Finns inte!");
                return;
            }

            foreach (var item in v.Elements("namn"))
            {
                Sökresultat.Add(item.Value);                
            }
            listBoxSökResultat.DataSource = null;
            listBoxSökResultat.DataSource = Sökresultat;

        }

        private void listBoxSökResultat_SelectedIndexChanged(object sender, EventArgs e)
        {
            string markerat;


            markerat = listBoxSökResultat.SelectedItem.ToString().ToLower();
            if (markerat == null) return;
            listBox1.Items.Clear();
            if (listBoxSökResultat.SelectedItems.Count == 0) return;
            var v = (from x in el.Descendants("recept")
                     where x.Element("namn").Value.ToLower() == markerat
                     select x).FirstOrDefault();

            if (v == null)
            {
                MessageBox.Show("Finns inte!");
                return;
            }

            textBoxNamn.Text = v.Element("namn").Value;
            listBox1.Items.Add(v.Element("portioner").Value);

            var test = v.DescendantsAndSelf("ingrediens").ToList();
            foreach (var item in test)
            {
                listBox1.Items.Add(item.Value);
            }

            var test2 = v.DescendantsAndSelf("steg").ToList();
            foreach (var item in test2)
            {
                listBox1.Items.Add(item.Value);
            }

        }
4

1 回答 1

0

listBoxSökResultat.SelectedItem是什么null,所以任何进一步的调用 ( .ToString()) 都会导致该异常。您当前正在检查它不是null 并且 SelectedItems具有count高于0,但是问题发生之后。到那时为时已晚。防守检查很棒,但你做得太晚了。

SelectedItem如果null当时没有选定的项目,那么您应该首先检查:

if (listBoxSökResultat.SelectedItem != null)
{
    markerat = listBoxSökResultat.SelectedItem.ToString().ToLower();
}

这会让你通过这个特殊的问题。

于 2013-10-16T11:02:02.637 回答