在数组中循环以设置视图模型属性.如果索引没有';不存在

本文关键字:索引 不存在 如果 属性 循环 数组 设置 模型 视图 | 更新日期: 2023-09-27 18:27:40

我正在循环遍历嵌套在另一个项数组中的项数组。

几乎总是,内部数组包含5个索引,但我使用的提要中很可能只有4个索引

当我将索引添加到ViewModel中时,如果缺少第五个索引,一切都会崩溃。

在这种特定情况下,我如何防止"索引在数组的边界之外"错误?

private List<ImageViewModel> ConvertSmugMugModel(SmugMugGallery smugMugGallery)
{
    return smugMugGallery.Channel.Items.Select(i => new ImageViewModel
        {
            TinyImage = i.Group.Contents[0].Url, 
            ThumbnailUrl = i.Group.Contents[1].Url, 
            SmallImageUrl = i.Group.Contents[2].Url,
            MediumImageUrl = i.Group.Contents[3].Url,
            LargeImageUrl = i.Group.Contents[4].Url
        }).ToList();
}

*注意:如果使用数组不是最合适的,我并不反对移动到iCollection或其他对象。我只是不想添加膨胀,如果我不需要的话。


编辑

卡尔在下面的评论中问这个模型长什么样。

[XmlRoot("rss")]
public class SmugMugGallery
{
    [XmlElement("channel")]
    public m_Channel Channel { get; set; }
    public class m_Channel
    {
        [XmlElement("item")]
        public Item[] Items { get; set; }
        public class Item
        {
            [XmlElement("group", Namespace = "http://search.yahoo.com/mrss/")]
            public m_Group Group { get; set; }
            public class m_Group
            {
                [XmlElement("content", Namespace = "http://search.yahoo.com/mrss/")]
                public Content[] Contents { get; set; }
                public class Content
                {
                    [XmlAttribute("url")]
                    public string Url { get; set; }
                }
            }
        }
    }
}

在数组中循环以设置视图模型属性.如果索引没有';不存在

我的第一个想法是使用?操作员,就像这样:

    private List<ImageViewModel> ConvertSmugMugModel(SmugMugModel smugMugGallery)
    {
        return smugMugGallery.Channel.Items.Select(i => new ImageViewModel
        {
            TinyImage = i.Group.Contents[0].Url,
            ThumbnailUrl = i.Group.Contents[1].Url,
            SmallImageUrl = i.Group.Contents[2].Url,
            MediumImageUrl = i.Group.Contents[3].Url,
            LargeImageUrl = i.Group.Contents.Count() > 4 ? i.Group.Contents[4].Url:new Url("blank")
        }).ToList();
    }

你可能还想把这个检查也放在其他元素中,除非你有101%的把握不会遇到少于4个元素。周四:

    private List<ImageViewModel> ConvertSmugMugModel(SmugMugModel smugMugGallery)
    {
        return smugMugGallery.Channel.Items.Select(i => new ImageViewModel
        {
            TinyImage = i.Group.Contents.Count() > 0 ? i.Group.Contents[0].Url:new Url("blank"),
            ThumbnailUrl = i.Group.Contents.Count() > 1 ? i.Group.Contents[1].Url:new Url("blank"),
            SmallImageUrl = i.Group.Contents.Count() > 2 ? i.Group.Contents[2].Url:new Url("blank"),
            MediumImageUrl = i.Group.Contents.Count() > 3 ? i.Group.Contents[3].Url:new Url("blank"),
            LargeImageUrl = i.Group.Contents.Count() > 4 ? i.Group.Contents[4].Url:new Url("blank")
        }).ToList();
    }