6

現在、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; }
}
4

1 に答える 1

4

いいえ、ジェネリック型に基づく条件付きコンパイルはありません。

ジェネリック置換は、コンパイル時ではなく実行時に実行されます。

これは、.NET ジェネリックと C++ テンプレートの違いの 1 つです。

ジェネリックには、C++ テンプレートにある特殊化の概念もありません。

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

于 2012-08-17T01:42:38.617 に答える