当前位置: 首页 > 知识库问答 >
问题:

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

曹建华
2023-03-14

情况:
我正在尝试实现一个为项目分配权重的专用集合。
我无法使用列表

方法:

实现接口工作:

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

    [...]
}

问题:
但是现在,我突然遇到错误,似乎显式接口实现不再被识别。

错误CS0535:“WeightedList”未实现接口成员“ICollection”

错误CS0539:“加权列表。在可实现的接口成员中找不到显式接口声明中的Add((T项,双权重))'

我所做的唯一更改是将方法更改为显式实现。
到目前为止,这对我很有用,但使用元组作为接口泛型似乎会破坏它。
我还尝试了接口的未命名元组(例如IList

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


共有1个答案

邬浩涆
2023-03-14

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

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

 类似资料:
  • 问题内容: 我是Go编程语言的新手,最近遇到了以下代码: 但是,我不理解函数签名背后的含义。它接受接口作为参数。你能解释一下这是怎么回事吗?谢谢 问题答案: Go使用接口来泛化类型。因此,如果您想要一个带有特定接口的函数,则可以编写 可以将满足的每种类型传递给。 现在,可以如下所示: 为了满足,实现它的类型必须实现。 但是,如果您需要一个空接口(),则该对象不需要实现要传递给该函数的任何方法: 上

  • 有人知道为什么这段代码没有对员工进行正确的排序吗?我需要他们按照工资的多少按升序排序。 我想我把smth搞砸了,因为我把工资存进了双打。但我真的不知道该怎么办。Plz帮助。 输出: 这也不管用

  • 使用操作接口 显示图像后按下按钮,即会显示操作接口。 显示 显示图像的相关信息 辅助 显示可利用PSP™主机的按钮直接操作的项目 前移 显示上一张图像 后退 显示下一张图像 播放 开始幻灯片秀 暂停 暂停幻灯片秀 停止 停止幻灯片秀 重复 重复播放幻灯片秀

  • 使用操作接口 播放时若按下按钮,会显示操作接口。显示的图标会因播放的影像内容而异。 重要 部分内容之播放方式可能会因制作者的意图而被预先设定。遇此情形时,操作接口的部分项目可能失效。 选单 显示UMD™VIDEO内的选单。 搜寻场景 保存至Memory Stick™或主机内存的图像文件案会于一定间隔显示缩图,可选择想观看的场景播放。 1. 利用方向按钮,选择缩图的显示间隔。 可选择时间或章。  

  • 使用操作接口 播放时若按下按钮,会显示操作接口。 上一个群组 回到上一个群组的起始处。 下一个群组 跳至下一个群组的起始处。 上一首曲目 回到播放中曲目的起始处或上一首曲目的起始处。 下一首曲目 跳至下一首曲目的起始处。 快退/快进 快退/快进播放。 按住按钮时,仅会于按下按钮时持续快退/快进。 播放 播放乐曲。 暂停 暂停播放。 再度选择后即会开始播放。 停止 停止播放。 群组模式 变换为群组模