2

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

错误 FS0193:类型约束不匹配。WebRequest 类型与 HttpWebRequest 类型不兼容。“WebRequest”类型与“HttpWebRequest”类型不兼容

第 2 行 (let 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()

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

4

1 回答 1

6

误差很小。运算符将仅执行已知在编译时成功的强制转换,因此:>不会强制转换 from HttpWebRequest.Create(url)toHttpWebRequest因为这实际上返回 a WebRequest。因此,您需要使用

 let req = HttpWebRequest.Create(url) :?> HttpWebRequest

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

于 2013-06-06T07:39:21.920 回答