如何知道C#List集合中的确切元素数

时间:2012-03-18 12:45:44

标签: c# list ienumerable

我从我的视图页面传递了一到五个图像到控制器。

  <input type="file" name="Images" /><br />
  <input type="file" name="Images" /><br />
  <input type="file" name="Images" /><br />
  <input type="file" name="Images" /><br />
  <input type="file" name="Images" /><br />

我在控制器上收到这样的

 IEnumerable<HttpPostedFileBase> images

将此数据与其他数据一起发送到myDomainModel 我试过这个

List<Photo> Photos = new List<Photo>();
for (int i = 0; i < Images.Count(); i++)
{
   foreach (var image in Images)
   {
      Photo p = new Photo();
      p.ImageMimeType = image.ContentType;
      p.ImageData = new byte[image.ContentLength];
      image.InputStream.Read(p.ImageData, 0, image.ContentLength);

      Photos.Add(p);
   }                
}

但Images.Count()返回整个列表的容量,所以当我发布时,让我说2个图像而不是5个我遇到麻烦导致代码尝试循环5次。

所以,问题是如何获取列表中的元素数量。不是容量。

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以测试ContentLength是否为空(或者是否还有其他属性可以检查是否提交了“图片”)?

然后你可以使用Linq并执行:int nbImages = Images.Count(i => i.ContentLength > 0);

答案 1 :(得分:1)

目前尚不清楚发生了什么。听起来好像源页面正在添加用户未提交的空白图像?如果是这种情况,那么你最好在那里解决这个问题。

如果失败了,那么这应该有效:

var Photos = new List<Photo>(); 

foreach (var image in Images) 
{ 
   if(image != null && image.ContentLength > 0)
   {
      Photo p = new Photo(); 
      p.ImageMimeType = image.ContentType; 
      p.ImageData = new byte[image.ContentLength]; 
      image.InputStream.Read(p.ImageData, 0, image.ContentLength); 

      Photos.Add(p); 
   }
}