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

f87krz0w  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(134)

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

public interface MyInterface
    : IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>
{            
}

public class MyClass : Dictionary<int,Dictionary<DateTime, double>>, MyInterface            
{            
    //setting GetEnumerator() to public yields an CS0106
    IEnumerator<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>> 
        IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>.GetEnumerator()
    {
        yield break;
    }

    static public void Foo(IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>> data)
    {
        //processing data...
    }            

    static void Demo()
    { 
        var mc = new MyClass();
        //stops working if MyInterface is implemented:
        mc.Any();//CS1061
        Foo(mc);
    }

    //Workaround for specific LINQ-extensions:
    //public bool Any() => this.Any();
}

字符串
在一天结束时,类被用作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
mc.Any<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>();

字符串

相关问题