【问题标题】:How would you simplify this mapping? Array to objects您将如何简化此映射?数组到对象
【发布时间】:2012-12-18 02:06:21
【问题描述】:

您认为循环遍历img.Group.Contents 并将值写入galleryImage 的最干净的方法是什么????对象?

galleryImage.TinyImage = new myModel.Image._Img();

galleryImage.TinyImage.Url = img.Group.Contents[0].Url;
galleryImage.TinyImage.FileSize = img.Group.Contents[0].FileSize;
galleryImage.TinyImage.Type = img.Group.Contents[0].Type;
galleryImage.TinyImage.Medium = img.Group.Contents[0].Medium;
galleryImage.TinyImage.Width = img.Group.Contents[0].Width;
galleryImage.TinyImage.Height = img.Group.Contents[0].Height;
galleryImage.TinyImage.Hash = img.Group.Contents[0].Hash;

galleryImage.Thumbnail.Url = img.Group.Contents[1].Url;
galleryImage.Thumbnail.FileSize = img.Group.Contents[1].FileSize;
galleryImage.Thumbnail.Type = img.Group.Contents[1].Type;
galleryImage.Thumbnail.Medium = img.Group.Contents[1].Medium;
galleryImage.Thumbnail.Width = img.Group.Contents[1].Width;
galleryImage.Thumbnail.Height = img.Group.Contents[1].Height;
galleryImage.Thumbnail.Hash = img.Group.Contents[1].Hash;

galleryImage.SmallImage.Url = img.Group.Contents[2].Url;
galleryImage.SmallImage.FileSize = img.Group.Contents[2].FileSize;
galleryImage.SmallImage.Type = img.Group.Contents[2].Type;
galleryImage.SmallImage.Medium = img.Group.Contents[2].Medium;
galleryImage.SmallImage.Width = img.Group.Contents[2].Width;
galleryImage.SmallImage.Height = img.Group.Contents[2].Height;
galleryImage.SmallImage.Hash = img.Group.Contents[2].Hash;

galleryImage.MediumImage.Url = img.Group.Contents[3].Url;
galleryImage.MediumImage.FileSize = img.Group.Contents[3].FileSize;
galleryImage.MediumImage.Type = img.Group.Contents[3].Type;
galleryImage.MediumImage.Medium = img.Group.Contents[3].Medium;
galleryImage.MediumImage.Width = img.Group.Contents[3].Width;
galleryImage.MediumImage.Height = img.Group.Contents[3].Height;
galleryImage.MediumImage.Hash = img.Group.Contents[3].Hash;

galleryImage.LargeImage.Url = img.Group.Contents[4].Url;
galleryImage.LargeImage.FileSize = img.Group.Contents[4].FileSize;
galleryImage.LargeImage.Type = img.Group.Contents[4].Type;
galleryImage.LargeImage.Medium = img.Group.Contents[4].Medium;
galleryImage.LargeImage.Width = img.Group.Contents[4].Width;
galleryImage.LargeImage.Height = img.Group.Contents[4].Height;
galleryImage.LargeImage.Hash = img.Group.Contents[4].Hash;

galleryImage.ExtraLargeImage.Url = img.Group.Contents[5].Url;
galleryImage.ExtraLargeImage.FileSize = img.Group.Contents[5].FileSize;
galleryImage.ExtraLargeImage.Type = img.Group.Contents[5].Type;
galleryImage.ExtraLargeImage.Medium = img.Group.Contents[5].Medium;
galleryImage.ExtraLargeImage.Width = img.Group.Contents[5].Width;
galleryImage.ExtraLargeImage.Height = img.Group.Contents[5].Height;
galleryImage.ExtraLargeImage.Hash = img.Group.Contents[5].Hash;

【问题讨论】:

    标签: c# arrays loops


    【解决方案1】:

    函数提供了一种简化重复任务的好方法:

    void ConfigureImage(MyImageType img, int pos) {
        img.Url = img.Group.Contents[pos].Url;
        img.FileSize = img.Group.Contents[pos].FileSize;
        img.Type = img.Group.Contents[pos].Type;
        img.Medium = img.Group.Contents[pos].Medium;
        img.Width = img.Group.Contents[pos].Width;
        img.Height = img.Group.Contents[pos].Height;
        img.Hash = img.Group.Contents[pos].Hash;
    }
    

    有了这个函数,只需六行代码就可以重写:

    ConfigureImage(galleryImage.TinyImage, 0);
    ConfigureImage(galleryImage.Thumbnail, 1);
    ConfigureImage(galleryImage.SmallImage, 2);
    ConfigureImage(galleryImage.MediumImage, 3);
    ConfigureImage(galleryImage.LargeImage, 4);
    ConfigureImage(galleryImage.ExtraLargeImage, 5);
    

    【讨论】:

      【解决方案2】:

      我假设galleryImage.??? 对象都是同一类型?

      如果是,为它们声明一个数组:

      var list = new [] { 
         galleryImage.TinyImage, galleryImage.Thumbnail, galleryImage.SmallImage,
         galleryImage.MediumImage, galleryImage.LargeImage, 
         galleryImage.ExtraLargeImage };
      

      然后你可以用for循环遍历它们:

      for (int i=0; i<6; i++) {
          list[i].Url = img.Group.Contents[i].Url;
          list[i].FileSize = img.Group.Contents[i].FileSize;
          list[i].Type = img.Group.Contents[i].Type;
          list[i].Medium = img.Group.Contents[i].Medium;
          list[i].Width = img.Group.Contents[i].Width;
          list[i].Height = img.Group.Contents[i].Height;
          list[i].Hash = img.Group.Contents[i].Hash;
      }
      

      【讨论】:

      • 我已经发布了我的最终代码作为单独的答案,但我基本上使用了你的指导。谢谢。
      【解决方案3】:

      大概是这样的

      int ix = 0;
      foreach( var dst in new [] { galleryImage.TinyImage, galleryImage.Thumbnail, etc }) {
        src = img.Group.Contents[ix];
        dst.Url = src.Url;
        dst.FileSize = src.FileSize;
        dst.Type = src.Type;
        dst.Medium = src.Medium;
        dst.Width = src.Width;
        dst.Height = src.Height;
        dst.Hash = src.Hash;
        ix++;
      }
      

      【讨论】:

        【解决方案4】:

        根据@Blorgbeard 的回答,这是我的最终代码。我不得不对其进行一些修改,因为imgType 数组的长度未知。如果我使用for 循环,它会抛出“索引越界异常”。

        var imgType = new[] {
            galleryImage.TinyImage = new SmugMugGalleryModel.Image._Img(),
            galleryImage.Thumbnail = new SmugMugGalleryModel.Image._Img(),
            galleryImage.SmallImage = new SmugMugGalleryModel.Image._Img(),
            galleryImage.MediumImage = new SmugMugGalleryModel.Image._Img(),
            galleryImage.LargeImage = new SmugMugGalleryModel.Image._Img(),
            galleryImage.ExtraLargeImage = new SmugMugGalleryModel.Image._Img(),
            galleryImage.TwoExtraLargeImage = new SmugMugGalleryModel.Image._Img(),
            galleryImage.ThreeExtraLargeImage = new SmugMugGalleryModel.Image._Img(),
            galleryImage.OriginalImage = new SmugMugGalleryModel.Image._Img(),
        };
        
        var count = 0;
        foreach (var i in img.Group.Contents)
        {
            imgType[count].Url = i.Url;
            imgType[count].FileSize = i.FileSize;
            imgType[count].Type = i.Type;
            imgType[count].Medium = i.Medium;
            imgType[count].Width = i.Width;
            imgType[count].Height = i.Height;
            imgType[count].Hash = i.Hash;
            count++;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-25
          • 1970-01-01
          • 2018-03-10
          • 1970-01-01
          • 2022-11-24
          • 1970-01-01
          • 2021-04-18
          • 2023-04-01
          相关资源
          最近更新 更多