通用方法的条件编译

时间:2012-08-17 01:38:06

标签: c# .net generics

目前正在开发一个双向查找关联泛型,按TKey排序。在某些时候,我希望能够访问以下内容:

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

1 个答案:

答案 0 :(得分:4)

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

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

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

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

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