0

ジェネリック クラスと、引数としてデリゲート (ジェネリックかどうか) を受け入れる 2 つのメソッドがあります。

public sealed class MyClass<TResult>
{
   public MyClass ContinueWith(ThreadInfo.Parameterized arg)
   {
   }

   public MyClass<TResult> ContinueWith<TResult>(ThreadInfo<TResult>.Parameterized arg)
   {
   }
}

どこ:

public sealed class MyClass
{
}

コンパイラ警告 (レベル 3) CS0693がありますが、2 番目の方法から削除すると<TResult>:

public MyClass<TResult> ContinueWith(ThreadInfo<TResult>.Parameterized arg)

このメソッドはもう使用できません。コンパイラが最初のメソッドを使用したいと考えているため、コンパイラ エラーが発生します。

どうすればこの問題を解決できますか?

4

2 に答える 2

3

あなたが本当に望んでいるように聞こえます:

public MyClass<TResult> ContinueWith(ThreadInfo<TResult>.Parameterized arg)

つまり、レベルTResultで宣言されたパラメーターを使用します。

本当にジェネリック メソッドにしたい (つまり、新しい型パラメーターを導入する) 場合は、別の名前を付ける必要があります。

public MyClass<T2> ContinueWith<T2>(ThreadInfo<T2>.Parameterized arg)

(ここにaを返したい、またはそれに類似したものを返したいと思うかもしれMyClass<TResult>ません - 私たちはあなたが達成しようとしていることを本当に知らないので、詳細なヘルプを提供することは困難です.)

于 2012-11-02T09:10:49.443 に答える
0

別のパラメーター名を使用する必要があります。したがって、これは何を達成したいかによって異なります。

MyClass<TResult>戻り値の型が型であり、型を選択できる次のようなものが必要だと思いますThreadInfo<>

public MyClass<TResult> ContinueWith<T1>(ThreadInfo<T1>.Parameterized arg)
{
   //...
}

または、オブジェクトのインスタンスを作成するときにのみタイプを選択する場合:

public MyClass<TResult> ContinueWith(ThreadInfo<TResult>.Parameterized arg)
{
   //...
}
于 2012-11-02T09:19:05.670 に答える