我有我的泛型类和两个接受委托作为参数的方法(通用或非通用)
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)
我不能再使用这种方法,如果我尝试编译错误,因为编译器认为我想使用第一种方法。
我该如何解决这个问题?
答案 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)
{
//...
}