【发布时间】:2019-05-15 19:03:15
【问题描述】:
我正在尝试实现一个可以双向索引的通用容器:
class DoubleIndexer<T1, T2>
{
public T2 this[T1 key] { get => default; set { } }
public T1 this[T2 key] { get => default; set { } }
}
问题是当我尝试对 T1 和 T2 使用具有相同类型的实例时出现编译时错误:
var int_int = new DoubleIndexer<int, int>();
int_int[1] = 13; // CS0121: The call is ambiguous between the following
// methods or properties: 'DoubleIndexer<T1, T2>.this[T1]'
// and 'DoubleIndexer<T1, T2>.this[T2]'
T1和T2类型不同时没有问题:
var int_string = new DoubleIndexer<int, string>();
int_string[1] = "Hello"; // OK
int_string["Hello"] = 1; // OK
var int_byte = new DoubleIndexer<int, byte>();
int_byte[1] = 13; // OK
int_byte[(byte)13] = 1; // OK
这个问题有什么解决方法吗,还是我不得不改变我的泛型类的接口?
【问题讨论】:
-
您自己不觉得这很模棱两可吗?您甚至期望示例中的代码做什么?调用两个索引器?一?随机?
-
@Adrian 他不是在问为什么会这样,而是在问“解决方法”
-
@Adrian 当然是模棱两可的。我正在寻找一种解决歧义的方法,如果可能的话,不要更改我的类的接口。
-
@YuriyFaktorovich 问题是期望的结果是什么。 “解决方法”不足以解释所需的行为。解决方法应该怎么做?
-
@TheodorZoulias 具体类型为
int和int。它们无法区分。
标签: c# generics compiler-errors