gpt4 book ai didi

c# - 使用元组作为接口(interface)通用的显式接口(interface)实现不起作用

转载 作者:行者123 更新时间:2023-12-04 00:24:27 25 4
gpt4 key购买 nike

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

方法:

实现接口(interface)工作:

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

[...]
}

问题:
但现在,我突然收到错误,似乎不再识别显式接口(interface)实现。

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

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

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

最佳答案

在显式接口(interface)实现中,声明正确的接口(interface)非常重要:

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方法是在基接口(interface)中声明的,而不是在派生接口(interface)中声明的。

关于c# - 使用元组作为接口(interface)通用的显式接口(interface)实现不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58802751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com