对象引用未设置为对象的实例,xelement为listview

时间:2013-10-01 06:15:19

标签: c#

    private void ButtonRequest_Click(object sender, EventArgs e)
    {
        XmlDocument xml = new XmlDocument();
        XmlDocument request = new XmlDocument();
        XmlDocument fil = new XmlDocument();
        request = xmlRequest1();
        fil = xmlFilter();
        response = doAvail(request, fil);
        XElement po = XElement.Parse(response.OuterXml);
        IEnumerable<XElement> childElements = from el in po.Elements() select el;
        foreach (XElement el in childElements)
        { 



            ListViewItem item = new ListViewItem(new string[]
                    {
                        el.Descendants("Name").FirstOrDefault().Value,
                        el.Descendants("PCC").FirstOrDefault().Value,
                        el.Descendants("BusinessTitle").FirstOrDefault().Value,
                    });
            ListViewResult.Items.Add(item);
        }
    }
当我循环到lieviewitem时,

ı有一个错误。 请帮助,谢谢。

1 个答案:

答案 0 :(得分:1)

您正在使用FirstOrDefault(),如果找不到任何值,它将返回null - 但您无条件地取消引用该返回值。如果你想要处理你没有获得任何值的情况,只需使用强制转换为string而不是Value属性:

ListViewItem item = new ListViewItem(new string[]
{
    (string) el.Descendants("Name").FirstOrDefault(),
    (string) el.Descendants("PCC").FirstOrDefault(),
    (string) el.Descendants("BusinessTitle").FirstOrDefault(),
});

现在,数组将包含任何缺少元素的空引用。我不知道列表视图是否会处理,请注意。

如果您想要处理找不到名称/ pcc / title的情况,请使用First清楚说明:

ListViewItem item = new ListViewItem(new string[]
{
    el.Descendants("Name").First().Value,
    el.Descendants("PCC").First().Value,
    el.Descendants("BusinessTitle").First().Value,
});

当然,目前仍然会给你一个例外 - 只是更清楚一个。我的猜测是你错过了一个你真正想要的命名空间:

XNamespace ns = "some namespace URL here";
ListViewItem item = new ListViewItem(new string[]
{
    el.Descendants(ns + "Name").First().Value,
    el.Descendants(ns + "PCC").First().Value,
    el.Descendants(ns + "BusinessTitle").First().Value,
});

...但是我们不知道你需要什么命名空间而不知道你的XML是什么样的。