【问题标题】:foreach loop through first item in array c#foreach 循环遍历数组 c# 中的第一项
【发布时间】:2018-06-26 07:45:36
【问题描述】:

我想遍历文件并始终确保它只是我循环遍历的数组中的一项

var files = Request.Form.Files;
var singleFile = files[0];
foreach (var file in singleFile)
{

}

我收到错误 foreach 语句无法对“?”类型的变量进行操作因为 '?'不包含“GetEnumerator”的公共定义

我该如何解决这个问题!谢谢

【问题讨论】:

  • 为什么要迭代单项? singleFile 已经包含数组的第一项。
  • 你能解释一下“循环通过”是什么意思吗?如何循环遍历单个项目?
  • 我只是想确保它始终获得循环中的第一项,因为如果有意义的话,人们可能会同时上传 2 个文件
  • files[0] 将始终获得集合中的第一项。如果这就是你想要的,你就完成了。您不能迭代那个项目,因为它是一个项目,而不是一个集合。

标签: c# arrays file file-upload foreach


【解决方案1】:

您不能循环访问非集合类型的项目。您已将Request.Form.Files 中的第一个文件分配给一个变量。所以这个变量引用单个文件而不是全部。

您可以使用Count-propertyCount-property

int fileCount = Request.Form.Files.Count;
if(fileCount > 0)
{
    HttpPostedFile firstFile = Request.Form.Files[0];
    // do something with it ....
}

如果你想枚举所有你可以使用循环但在Request.Form.Files:

foreach (HttpPostedFile file in Request.Form.Files)
{
    // do something with it
}

【讨论】:

    【解决方案2】:

    错误很明显。 singleItem 只是您原始收藏中的一件,而不是实际收藏。如果要检查该集合是否只有一个元素,请使用files.Count

    if(files.Count != 1)
        Console.WriteLine("Evil, evil");
    else
    {
        var singleFile = files[0];
        // ....
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,它会给出集合的第一个项目。如果收集计数为 0,则返回 null

      Request.Form.Files.FirstOrDefault()
      

      【讨论】:

      • 因为Request.Form.Files 不是一个数组而是一个HttpFileCollection 没有实现IEnumerable<T> 这不会编译
      猜你喜欢
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2014-08-19
      • 2010-10-24
      • 2018-07-17
      • 2021-10-11
      相关资源
      最近更新 更多