0

我的问题是,在我的 xml 数据中,有时一个特定的节点不存在,我怎样才能捕捉到它以避免"Object reference not set to an instance of an object." error并跳过该值并继续在 listview 中添加项目?

这是我的 linq to xml 的查询

var summary = from r in doc.Descendants("TrxDetailCard") 
                      select new 
                      {
                          Account_Type = r.Element("Account_Type_CH").Value,
                          Captured = r.Element("Captured").Value,
                          Trans_Type_ID = r.Element("Trans_Type_ID").Value,
                          Acct_Num_CH = r.Element("Acct_Num_CH").Value,
                          Tip_Amt_MN = r.Element("Tip_Amt_MN").Value,
                          Total_Amt_MN = r.Element("Total_Amt_MN").Value,
                          Date_DT = r.Element("Date_DT").Value,
                      };

有时Tip_Amt_MN不存在

在列表视图中添加项目

foreach (var i in summary)
        {
            ListViewItem it = new ListViewItem(i.Account_Type.ToString());
            it.SubItems.Add(i.Captured.ToString());
            it.SubItems.Add(i.Trans_Type_ID.ToString());
            it.SubItems.Add(i.Acct_Num_CH.ToString());
            it.SubItems.Add(i.Tip_Amt_MN.ToString());
            it.SubItems.Add(i.Total_Amt_MN.ToString());
            it.SubItems.Add(i.Date_DT.ToString());
            listView1.Items.Add(it);
        }
4

2 回答 2

1

如果您不介意将属性设置为 null,则可以将 XElement 强制转换为字符串。换句话说,如果Account_Type_CH元素不存在,这不会抛出异常:

Account_Type = (string)r.Element("Account_Type_CH")
于 2012-12-23T23:38:43.017 回答
1

在我不想破坏查询的情况下,我倾向于自由使用 FirstOrDefault():

r.Element("Tip_Amt_MN").Value

变成:

r.Elements("Tip_Amt_MN").Select(x => x.Value).FirstOrDefault()
于 2012-12-23T23:42:55.047 回答