2013-06-06 52 views
1

最近我在一个CBIR学生项目中工作。我们需要许多世界地标的照片。我发现用F#编写的这个Flickr Crawler项目(blog,sourcecode)。但是,在我的Visual Studio 2010中构建它时遇到错误:F#错误FS0193(VS 2010):类型'WebRequest'与'HttpWebRequest'类型不兼容

错误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() 

之前我没有,所以我学习F#不熟悉F#。这个错误信息是什么意思,我该如何解决?

+0

您可以发布完整的错误消息(包括行号等)和相关代码段代码,以便在链接代码发生变化(以及人们不必下载和编译大量代码以查找错误)的情况下,您的问题可能对未来访问的任何人有所帮助。 –

+0

当然,谢谢你的建议! –

回答

5

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

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

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