Visual studio 异步块内CookieCollection迭代中的编译错误
我注意到在异步块内完成的CookieCollection的迭代过程中出现了一种奇怪的行为。基本上,编译器无法推断集合的类型 下面是错误的图像:Visual studio 异步块内CookieCollection迭代中的编译错误,visual-studio,f#,Visual Studio,F#,我注意到在异步块内完成的CookieCollection的迭代过程中出现了一种奇怪的行为。基本上,编译器无法推断集合的类型 下面是错误的图像: 这是F#编译器/编辑器中的问题吗?正如错误所示,否不实现IEnumerable: httpWebResponse.Cookies中cookie的Seq.cast do ... 如错误所示,否不实现IEnumerable: httpWebResponse.Cookies中cookie的Seq.cast do ... 要使循环在异步块中工作,需要首先强制转
这是F#编译器/编辑器中的问题吗?正如错误所示,否不实现
IEnumerable
:
httpWebResponse.Cookies中cookie的Seq.cast do
...
如错误所示,否不实现IEnumerable
:
httpWebResponse.Cookies中cookie的Seq.cast do
...
要使循环在异步块中工作,需要首先强制转换集合:
async {
for c in httpWebResponse.Cookies |> Seq.cast<Cookie> do ()
}
原因是这两个构造不相同,尽管它们具有相同的语法
上面的一个是内置的for循环的“通用”循环,它可以处理不同类型的集合(使用IEnumerable接口,并附带一些注意事项,如§6.5.6序列迭代表达式中所述)。async块中的另一个是async builder的For
方法,该方法被明确定义为使用seq
)
所以不,这不是一个错误。这是async的内部结构 要使循环在异步块中工作,需要首先强制转换集合:
async {
for c in httpWebResponse.Cookies |> Seq.cast<Cookie> do ()
}
原因是这两个构造不相同,尽管它们具有相同的语法
上面的一个是内置的for循环的“通用”循环,它可以处理不同类型的集合(使用IEnumerable接口,并附带一些注意事项,如§6.5.6序列迭代表达式中所述)。async块中的另一个是async builder的For
方法,该方法被明确定义为使用seq
)
所以不,这不是一个错误。这是async的内部结构 有关循环的内置
行为的解释,请参见§6.5.6循环的序列迭代表达式。基本上,如果当前
属性具有返回类型obj
,并且集合类型具有具有更具体(非对象)返回类型的项
属性,则使用该属性。有关
循环的内置行为的解释,请参见§6.5.6序列迭代表达式。基本上,如果Current
属性具有返回类型obj
,并且集合类型具有具有更特定(非对象)返回类型的Item
属性,则使用该属性。
for c in httpWebResponse.Cookies do ()