我对foreach
循环如何使索引超出范围感到困惑。
我正在使用ebay api获取项目列表。
我可以在Visual Studio中使用QuickWatch验证该集合包含200个项目。
我搜索了重复的问题,但没有一个与我的情况相符。
我的代码检索项目列表:
public ItemTypeCollection GetMyActiveItems()
{
GetMyeBaySellingCall myEbaySelling = new GetMyeBaySellingCall(ApiContext);
myEbaySelling.ActiveList = new ItemListCustomizationType();
myEbaySelling.ActiveList.Sort = ItemSortTypeCodeType.ItemID;
myEbaySelling.UnsoldList = new ItemListCustomizationType();
myEbaySelling.UnsoldList.Sort = ItemSortTypeCodeType.ItemID;
myEbaySelling.SoldList = new ItemListCustomizationType();
myEbaySelling.SoldList.Sort = ItemSortTypeCodeType.ItemID;
myEbaySelling.Execute();
var items = myEbaySelling.ActiveListReturn.ItemArray;
//checking collection here. I can iterate this just fine.
// with no errors.
foreach (ItemType item in items)
{
var x = item.Title;
}
return items;
}
然后在Controller上,我只是返回将模型传递给View:
public ActionResult Items()
{
ItemTypeCollection items = service.GetMyActiveItems();
return View(items);
}
然后在视图中,我只是迭代项目以输出到浏览器:
@using eBay.Service.Core.Soap;
@model ItemTypeCollection
@foreach (ItemType item in Model)
{ // This is where the debugger stops on the first item with Index out of range exception.
<div class="col-sm-6 col-md-4">
<div class="thumbnail">
<h4 class="text-center"><span class="label label-info"></span></h4>
<img src="@item.PictureDetails.PictureURL[0]" class="img-responsive">
<div class="caption">
<div class="row">
<div class="col-md-6 col-xs-6">
<h3>@item.Title</h3>
</div>
<div class="col-md-6 col-xs-6 price">
<h3>
<label>@item.BuyItNowPrice.Value.ToString()</label>
</h3>
</div>
</div>
<p>@item.SubTitle</p>
</div>
</div>
</div>
}
答案 0 :(得分:0)
我认为您要检查以确保图片详细信息存在并且有图片网址
@if(item != null && item.PictureDetails != null && item.PictureDetails.PictureURL.Any())
{
<img src="@item.PictureDetails.PictureURL.FirstOrDefault()" class="img-responsive">
}
答案 1 :(得分:-1)
var items看起来像一个多维数组,尝试使用基于实际项目数的简单for循环。
Foreach会在多维数组中查找每个元素,包括那些没有title属性的元素。