2012-12-18 60 views
0

您認爲什麼是最簡潔的方式來循環訪問img.Group.Contents並將值寫入galleryImage。對象?你會如何簡化這種映射? Array to objects

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; 

回答

1

我假設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; 
} 
+0

我已經發布了我的最終代碼作爲單獨的答案,但我基本上使用了你的方向。謝謝。 –

5

功能提供了一個很好的方式來簡化重複任務:

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

大概就像

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++; 
} 
0

上@基於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++; 
}