6

目前正在研究按 TKey 排序的 2 路查找关联泛型。在某些时候,我希望能够访问如下:

public class Assoc<TKey, TValue>
{
     public TKey this[TValue value] { get; }
     public TValue this[TKey value] { get; }
}

但显然,当 TKey == TValue 时,这将失败。出于好奇,是否有条件编译语法来执行此操作:

public class Assoc<TKey, TValue>
{
     [Condition(!(TKey is TValue))]
     public TKey this[TValue value] { get; }

     [Condition(!(TKey is TValue))]
     public TValue this[TKey value] { get; }

     public TKey Key(TValue value) { get; }

     public TValue Value(TKey value) { get; }
}
4

1 回答 1

4

不,没有基于通用类型的条件编译。

泛型替换是在运行时执行的,而不是编译时。

这是 .NET 泛型和 C++ 模板之间的区别之一。

泛型也没有C++ 模板所具有的专业化概念。

http://msdn.microsoft.com/en-us/library/c6cyy67b.aspx

于 2012-08-17T01:42:38.617 回答