如何做到这一点所以它确实显示“没有价值”,而不是陷入错误

时间:2011-11-30 19:57:38

标签: c# visual-studio-2010 c#-4.0 silverlight-4.0

我正在使用以下代码,只要我没有丢失其中一个子节点(例如URL),该代码就可以正常工作。如果它 缺少然后我的代码错误了。如何使其不会出错并只返回一个字符串“No Value”。

这是我的代码

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>";

2 个答案:

答案 0 :(得分:1)

   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);

答案 1 :(得分:0)

尝试DefaultIfEmpty linq子句。