使用元组作为通用接口的显式接口实现不起作用

Explicit interface implementation with tuple as interface generic not working

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

方法

实现接口有效:

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

    [...]
}

但是,为了保持实现的简洁,我想明确地实现它的一些方法。

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);
    }

    [...]
}

问题:
但是现在突然报错,好像显式接口实现不识别了

Error CS0535 : 'WeightedList' does not implement interface member 'ICollection<(T item, double weight)>.Add((T item, double weight))'

Error CS0539 : 'WeightedList.Add((T item, double weight))' in explicit interface declaration is not found among members of the interface that can be implemented

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

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

在显式接口实现中,声明正确的接口很重要:

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<T> 派生自 ICollection<T>Add 方法是在基接口而不是派生接口中声明的。