Foreach的使用场合

总哈哈 2008-11-24 04:40:17
今天遇到个怪问题,上传几个文件的时候是这样用的,
// 获取所有文件
HttpFileCollection allFiles = request.Files;
想这样使用
foreach (HttpPostedFile file in allFiles) {
// 但是这里报错,说字符串不能转成HttpPostedFile
}
但是这样不行,虽然知道了不行了,但是很想知道到底在什么情况下才能使用foreach,请各位高手在这里讲解一下,谢谢!
...全文
330 32 点赞 打赏 收藏 举报
写回复
32 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
  • 打赏
  • 举报
回复
北亮bl 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了?
  • 打赏
  • 举报
回复
北亮bl 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看看,我看应该可以了。

  • 打赏
  • 举报
回复
加载更多回复
相关推荐
发帖
.NET社区
加入

5.9w+

社区成员

.NET技术交流专区
申请成为版主
帖子事件
创建了帖子
2008-11-24 04:40
社区公告
暂无公告