错误CS1061当调用LINQ-extension类实现额外的IELTS < >

f87krz0w  于 2024-01-03  发布在  其他
关注(0)|答案(1)|浏览(220)

我需要在一个已经从Dictionary<int,Dictionary<DateTime,double>>派生的类上实现IEnumerable<KeyValuePair<int,IEnumerable<KeyValuePair<DateTime,double>>>>不幸的是,当我试图访问像Any()这样的LINQ扩展并返回CS1061时,编译器会感到困惑:

  1. public interface MyInterface
  2. : IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>
  3. {
  4. }
  5. public class MyClass : Dictionary<int,Dictionary<DateTime, double>>, MyInterface
  6. {
  7. //setting GetEnumerator() to public yields an CS0106
  8. IEnumerator<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>
  9. IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>.GetEnumerator()
  10. {
  11. yield break;
  12. }
  13. static public void Foo(IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>> data)
  14. {
  15. //processing data...
  16. }
  17. static void Demo()
  18. {
  19. var mc = new MyClass();
  20. //stops working if MyInterface is implemented:
  21. mc.Any();//CS1061
  22. Foo(mc);
  23. }
  24. //Workaround for specific LINQ-extensions:
  25. //public bool Any() => this.Any();
  26. }

字符串
在一天结束时,类被用作Foo(...)等方法的参数,这需要比Dictionary更通用。
我们如何在MyClass上使用LINQ,同时实现MyInterface?(提供另一种将MyClass传递到Foo的方法也会有所帮助,但它不是问题的答案)。
由于需要实现MyInterface,我需要 Package 基类并重定向所有使用的Dictionary-methods -我很乐意有一个更优雅的解决方案。

toe95027

toe950271#

因为你的类实现了:

  1. IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>
  2. IEnumerable<KeyValuePair<int, Dictionary<DateTime, double>>>
    编译器无法推断出你想要调用哪个Any方法,它需要你帮助它做出决定,例如,你想要在第一个接口上调用Any
  1. mc.Any<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>();

字符串

相关问题