我需要在一个已经从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 -我很乐意有一个更优雅的解决方案。
1条答案
按热度按时间toe950271#
因为你的类实现了:
IEnumerable<KeyValuePair<int, IEnumerable<KeyValuePair<DateTime, double>>>>
IEnumerable<KeyValuePair<int, Dictionary<DateTime, double>>>
编译器无法推断出你想要调用哪个
Any
方法,它需要你帮助它做出决定,例如,你想要在第一个接口上调用Any
:字符串