0

我有我的通用类和两个接受委托作为参数的方法(无论是否通用)

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

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

在哪里:

public sealed class MyClass
{
}

我有编译器警告(level3)CS0693,但如果我<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)

(您可能希望在此处返回aMyClass<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 回答