F#错误FS0193(VS 2010):"WebRequest"类型与"HttpWebRequest"类型不兼容

hal*_*c.w 2 f# visual-studio-2010

最近我参加了一个CBIR学生项目.我们需要很多世界地标的照片.我发现这个用F#编写的Flickr Crawler项目(博客,源代码).但是在我的Visual Studio 2010中构建它时遇到错误:

错误FS0193:类型约束不匹配.WebRequest类型与HttpWebRequest类型不兼容."WebRequest"类型与"HttpWebRequest"类型不兼容

第2行(让req = ...)是错误发生的地方:

let downloadUrl(url:string) = 
    let req = HttpWebRequest.Create(url) :> HttpWebRequest
    req.UserAgent <- "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)";
    req.Method <- "GET";
    req.AllowAutoRedirect <- true;
    req.MaximumAutomaticRedirections <- 4;
    req.MaximumAutomaticRedirections <- 4;
    let resp = req.GetResponse()
    let stream = resp.GetResponseStream()
    let reader = new StreamReader(stream)
    reader.ReadToEnd()
Run Code Online (Sandbox Code Playgroud)

我之前没有学过F#所以我对F#不熟悉.此错误消息提示了什么以及如何解决?

Joh*_*mer 6

错误非常小.该:>运营商将只执行已知在编译时取得成功,那么将不会从投铸件HttpWebRequest.Create(url)HttpWebRequest,因为这实际上是返回WebRequest.作为你需要使用的reult

 let req = HttpWebRequest.Create(url) :?> HttpWebRequest
Run Code Online (Sandbox Code Playgroud)

而是允许在继承树中以另一个方向进行转换.不同之处在于,由:?>运行时生成的强制转换可能会失败(但在这种情况下不应该因为所有URL都应该是http)