如何做到这一点,这样它就会显示&;No value &;而不是陷入错误

本文关键字:value No 错误 显示 这一点 何做 | 更新日期: 2023-09-27 18:16:10

我使用下面的代码,只要我没有一个子节点(例如URL)缺失。如果它那我的代码就出错了。我怎么能使它不出错,只是返回一个字符串"无值"代替。

这是我的代码

string widgetsInfo = 
    loaded.Descendants("widget")
          .Select((w, i) =>
                new
                    {
                        WidgetIndex = i,
                        URL = w.Descendants("url").FirstOrDefault().Value,
                        Category = w.Descendants("PortalCategoryId").FirstOrDefault().Value
                    })
            .Select(w => String.Format("Index:{0}; URL:{1}; CATEGORY:{2}; ",
                                        w.WidgetIndex, w.URL, w.Category))
            .Aggregate((acc, next) => acc + Environment.NewLine + next);

这是我要解析的xml

string xml = @"<?xml version='1.0' encoding='UTF-8'?>
<widgets>
    <widget>
        <url>~/Portal/Widgets/ServicesList.ascx</url>
        <castAs>ServicesWidget</castAs>
        <urlType>ascx</urlType>
        <parameters>
            <PortalCategoryId>3</PortalCategoryId>
        </parameters>
    </widget>
    <widget>
        <url>www.omegacoder.com</url>
        <castAs>ServicesWidget</castAs>
        <urlType>htm</urlType>
        <parameters>
            <PortalCategoryId>41</PortalCategoryId>
        </parameters>
    </widget>
</widgets>";

如何做到这一点,这样它就会显示&;No value &;而不是陷入错误

   string widgetsInfo = 
    loaded.Descendants("widget")
          .Select((w, i) =>
                new
                    {
                        WidgetIndex = i,
                        URL = w.Descendants("url").FirstOrDefault() == null ? "No Value" : w.Descendants("url").FirstOrDefault().Value,
                        Category = w.Descendants("PortalCategoryId").FirstOrDefault() == null ? "No Value" : w.Descendants("PortalCategoryId").FirstOrDefault().Value
                    })
            .Select(w => String.Format("Index:{0}; URL:{1}; CATEGORY:{2}; ",
                                        w.WidgetIndex, w.URL, w.Category))
            .Aggregate((acc, next) => acc + Environment.NewLine + next);

试试DefaultIfEmpty linq子句