0

当我注意到我的 foreach 循环无法上传文件列表并且 for 循环确实有效时,我正在我的网站上工作。我很想知道为什么 for 循环有效而 foreaches 循环无效。

我收到的错误消息是:无法将 system.string 转换为 xx。

所以这些是我有的循环:

HttpFileCollection documentsList = Request.Files;

// Doesn't
foreach (var file in documentsList.Cast<HttpPostedFile>())
{
    var test = file;
}

// Doesn't
foreach (var file in documentsList)
{
    var test = (HttpPostedFile)file;
}

// Works
for (int i = 0; i < documentsList.Count; i++)
{
    var file = (HttpPostedFile) documentsList[i];
}

提前致谢!

4

1 回答 1

2

只要你看看HttpFileCollection's 的文档,它就会变得更加清晰......

索引器的声明类型为HttpPostedFile. 鉴于GetEnumerator

此枚举器将集合的键作为字符串返回。

所以基本上你的foreach循环是迭代集合中的键,而你想要值。这本质上是一个奇怪的设计决策NameObjectCollectionBase

你可以使用:

foreach (var file in documentsList.Cast<string>()
                                  .Select(key => documentsList[key]))
{
    ...
}
于 2014-02-24T10:11:43.017 回答