Foreach的使用场合

总哈哈 2008-11-24 04:40:17
今天遇到个怪问题,上传几个文件的时候是这样用的,
// 获取所有文件
HttpFileCollection allFiles = request.Files;
想这样使用
foreach (HttpPostedFile file in allFiles) {
// 但是这里报错,说字符串不能转成HttpPostedFile
}
但是这样不行,虽然知道了不行了,但是很想知道到底在什么情况下才能使用foreach,请各位高手在这里讲解一下,谢谢!
...全文
438 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
shhicii 2010-04-29
  • 打赏
  • 举报
回复
给大家一个 准确的回答,是因为Upload不是服务器端控件。

大家知道怎么回事了吧,说到底MS的Bug
itelite39660787 2009-06-15
  • 打赏
  • 举报
回复
HttpFileCollection 继承自 NameObjectCollectionBase,而 NameObjectCollectionBase 的 GetEnumerator() 返回 NameObjectKeysEnumerator,NameObjectKeysEnumerator 的 Current 属性返回的是 String 类型的 Key,所以当 foreach 时,Request.Files 确实是一个 String 类型集合,的确不能转换成 HttpPostedFile,而 HttpFileCollection 的 this[] 返回的确是 HttpPostedFile 类型。
如果写成
foreach (string key in Request.Files)
{
HttpPostedFile file = Request.Files[key];
或者
HttpPostedFile file = Request.Files.Get(key);

...
}
就可以
真是奇怪啊,不能理解,如有高手看到,还望给予讲解,谢谢
csgxiao 2008-11-27
  • 打赏
  • 举报
回复
的确是不能foreach的,,大家可以看看 反编译 后的.net 2.0中的实现代码
haifeng39 2008-11-25
  • 打赏
  • 举报
回复
up
游北亮 2008-11-25
  • 打赏
  • 举报
回复
bug?只有人人都会出现的问题,才能称之为bug吧
你把你的项目打包,发出来给我看看
youbl@126.com
总哈哈 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 mjjzg 的回复:]
应该是没问题的,你可以断点调试到那一行看看file 和 allFiles都是什么类型的,是否有值
[/Quote]
allfile肯定是有值的,而file,根本都下不了foreach,file肯定是什么都没有了!应该算是微软一个bug吧!(可能我真的无法解释这种现象了)
surewy 2008-11-25
  • 打赏
  • 举报
回复
up
derelictangel 2008-11-25
  • 打赏
  • 举报
回复
慢慢学习

PS:
我的目标是 ---->

^_^
liujiayu10 2008-11-25
  • 打赏
  • 举报
回复
any time
mjjzg 2008-11-24
  • 打赏
  • 举报
回复
应该是没问题的,你可以断点调试到那一行看看file 和 allFiles都是什么类型的,是否有值
criedshy 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 qinhl99 的回复:]
msdn:http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx
The foreach statement repeats a group of embedded statements for each element in an array or an object collection that implements the System.Collections..::.IEnumerable or ......
HttpFileCollection应该没有实现IEnumerable接口吧!
[/Quote]

应该是实现了啊,youbl 他说他不报错...真的不知道是什么原因了
qinhl99 2008-11-24
  • 打赏
  • 举报
回复
所以还是建议你用for好了
qinhl99 2008-11-24
  • 打赏
  • 举报
回复
msdn:http://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx
The foreach statement repeats a group of embedded statements for each element in an array or an object collection that implements the System.Collections..::.IEnumerable or ......
HttpFileCollection应该没有实现IEnumerable接口吧!
ershou007 2008-11-24
  • 打赏
  • 举报
回复
可能是BUG
总哈哈 2008-11-24
  • 打赏
  • 举报
回复
这可咋办啊,.NET出Bug了?
游北亮 2008-11-24
  • 打赏
  • 举报
回复
我也是2.0环境,没办法,也许真是人品问题了
criedshy 2008-11-24
  • 打赏
  • 举报
回复
无法将类型为“System.String”的对象强制转换为类型“System.Web.HttpPostedFile”。

我刚才试了一下也报这个错,

for(int iFile = 0; iFile < files.Count; iFile++)
{

/**////'检查文件扩展名字
HttpPostedFile postedFile = files[iFile];


用for循环就不会,晕
总哈哈 2008-11-24
  • 打赏
  • 举报
回复
现在的场合很简单了,我改了代码
前台aspx
<div id="divFilesPanel">
<ul>
<li><asp:FileUpload ID="myfile" runat="server" /></li>
</ul>
<div><input type="button" id="addUploadFile" value="添加上传控件" /> <asp:Button ID="btnUploadFile" runat="server" Text="开始上传" OnClick="btnUploadFile_Click" /></div>
</div>

后台cs
protected void btnUploadFile_Click(object sender, EventArgs e)
{
foreach (HttpPostedFile file in Request.Files)// 无法将类型为“System.String”的对象强制转换为类型“System.Web.HttpPostedFile”。
{ }
// WebUtility.PutFileToFolder(Request);
}
还出那个问题!
总哈哈 2008-11-24
  • 打赏
  • 举报
回复
我的.net环境是2.0,不知道是不是版本不合的原因。我这边是出问题了。呵呵!
tpu01yzx 2008-11-24
  • 打赏
  • 举报
回复
看MSDN上的一段话:
In C#, it is not strictly necessary for a collection class to inherit from IEnumerable and IEnumerator in order to be compatible with foreach; as long as the class has the required GetEnumerator, MoveNext, Reset, and Current members, it will work with foreach.
只要类实现了GetEnumerator, MoveNext, Reset, Current四个方法和属性就可以了,不一定说要实现IEnumerable 和IEnumerator 接口。而
HttpFileCollection 反射出来的结果为下面的内容
public sealed class HttpFileCollection : NameObjectCollectionBase
{......}
而NameObjectCollectionBase实现了ICollection, IEnumerable, ISerializable, IDeserializationCallback实现了四个接口,显然这符合foreach的要求.......
说类型不对,是因为Current属性的类型无法转换为要求的类型,你可以试试把string换成HttpPostedFile看看,我看应该可以了。

加载更多回复(12)

62,071

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧