通用 - 编译器警告CS0693或错误

时间:2012-11-02 09:09:21

标签: c# generics compiler-errors warnings

我有我的泛型类和两个接受委托作为参数的方法(通用或非通用)

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

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

其中:

public sealed class MyClass
{
}

我有Compiler Warning (level3) CS0693,但如果我从第二种方法中移除<TResult>

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

我不能再使用这种方法,如果我尝试编译错误,因为编译器认为我想使用第一种方法。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

听起来你好像 想要的那样:

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

换句话说,使用在类型级别声明的TResult参数。

如果你真的希望它是一个通用的方法(即引入一个新的类型参数),你必须给它一个不同的名称:

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

(你可能想在这里返回一个MyClass<TResult>或者类似的东西 - 我们真的不知道你想要实现什么,这使得它很难提供详细的帮助。)

答案 1 :(得分:0)

您必须使用不同的参数名称。所以这取决于你想要达到的目标。

我认为您需要类似这样的内容,其中返回类型的类型为MyClass<TResult>,您可以选择ThreadInfo<>的类型:

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

或者,如果您只想在创建对象实例时选择类型:

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