我正在努力查看我出错的地方,创建一个接口方法的委托
我的代码如下:
private static Func<HtmlDocument,IObservable<IData>> FindScrapeMethod(ICrawlerStrategy crawler,string scrapeDelegate) { Func<HtmlDocument,IObservable<IData>> action; var fullDelegateName = String.Format("ICrawlerStrategy.{0}",scrapeDelegate); if (!_delegateCache.TryGetValue(fullDelegateName,out action)) { var method = typeof(ICrawlerStrategy).getmethod(scrapeDelegate,BindingFlags.Public | BindingFlags.Instance ); action = (Func<HtmlDocument,IObservable<IData>>) Delegate.CreateDelegate(typeof(Func<HtmlDocument,IObservable<IData>>),crawler,method); _delegateCache.Add(fullDelegateName,action); } return action; }
接口声明是
public interface ICrawlerStrategy { Func<HtmlDocument,IObservable<IData>> ExtractorAsync(); }
实施类如下
public class MyCrawler : ICrawlerStrategy { <snip> Func<HtmlDocument,IObservable<IData>> ICrawlerStrategy.ExtractorAsync() { return (doc) => AsyncScraper(doc); } }
Edit1 – 根据@Yahia的要求:
public IObservable<IData> AsyncScraper(HtmlDocument page)
在尝试创建委托时,我收到“绑定到目标方法的错误”.当我步骤代码时,
>该方法不为null,因此它显然可以在类型上找到方法
>实例也不是null
任何指针,请.
谢谢
小号
解决方法
您的问题是传递给CreateDelegate的类型.
函数的返回值是
Func<HtmlDocument,IObservable<IData>>
因此,您的代表的类型是
Func<Func<HtmlDocument,IObservable<IData>>>
所以改变这一行(你必须修复其他人才能匹配)
action = (Func<Func<HtmlDocument,IObservable<IData>>>) Delegate.CreateDelegate(typeof(Func<Func<HtmlDocument,IObservable<IData>>>),method);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。