C# 将元组作为接口泛型的显式接口实现不起作用

C# 将元组作为接口泛型的显式接口实现不起作用,c#,c#-7.0,C#,C# 7.0,情况: 我正在尝试实现一个专门的集合,为项目分配权重。 我不能使用列表,因为集合需要跟踪更多信息以提供特殊功能。 但是,这个集合应该实现IList,这样我就可以使用一些扩展方法 方法: 实施接口工程: public class WeightedList<T> : IList<(T item, double weight)> { public void Add((T item, double weight) item) { this.Add

情况
我正在尝试实现一个专门的集合,为项目分配权重。
我不能使用
列表
,因为集合需要跟踪更多信息以提供特殊功能。
但是,这个集合应该实现
IList
,这样我就可以使用一些扩展方法

方法

实施接口工程:

public class WeightedList<T> : IList<(T item, double weight)> 
{
    public void Add((T item, double weight) item)
    {
        this.Add(item.item, item.weight);
    }

    [...]
}
公共类权重列表:IList
{
公共作废添加((T项,双倍重量)项)
{
添加(项目.项目,项目.重量);
}
[...]
}
但是,为了保持实现的整洁,我想显式地实现它的一些方法

public class WeightedList<T> : IList<(T item, double weight)> 
{
    // The method name Add is marked as source of error
    void IList<(T item, double weight)>.Add((T item, double weight) item)
    {
        this.Add(item.item, item.weight);
    }

    [...]
}
公共类权重列表:IList
{
//方法名Add被标记为错误源
作废IList.添加((T项,双倍重量)项)
{
添加(项目.项目,项目.重量);
}
[...]
}
问题
但是现在,我突然出现错误,显式接口实现似乎不再被识别

错误CS0535:“WeightedList”未实现接口成员“ICollection.Add((T项,双重权重))”

错误CS0539:在可实现的接口成员中找不到显式接口声明中的“WeightedList.Add((T项,双权重))”

我所做的唯一更改是将方法更改为显式实现。
到目前为止,这对我来说非常有效,但使用元组作为通用接口似乎会破坏它。
我还尝试了接口的未命名元组(例如,
IList
),但这没有改变任何事情

问题

为什么会出现这些错误以及如何修复它们?

在显式接口实现中,说明正确的接口非常重要:

public class WeightedList<T> : IList<(T item, double weight)> 
{
    // The method name Add is marked as source of error
    void ICollection<(T item, double weight)>.Add((T item, double weight) item)
    {
        this.Add(item.item, item.weight);
    }

    [...]
}
公共类权重列表:IList
{
//方法名Add被标记为错误源
作废ICollection.添加((T项,双倍重量)项)
{
添加(项目.项目,项目.重量);
}
[...]
}

IList
源自
ICollection
Add
方法是在基本接口中声明的,而不是派生接口。

有趣的是,我从来没有从错误消息中猜到这一点。这就解决了我的问题,我会尽快接受你的回答。非常感谢。顺便说一句,你知道为什么会这样吗?由于IList继承自ICollection,因此不会有什么区别,不?@slumersanim:显式接口实现并不完全遵循正常的继承规则。例如,您可以重新实现一个接口。此外,如果excplicit接口实现隐式地假定基本接口,这将非常有趣。